[android] Android P 가시성 awareimagebutton.setVisibility는 동일한 라이브러리 그룹에서만 호출 할 수 있습니다.
일부의 새로운 Android P FloatingActionButton을 사용하려고 하는데이 com.google.android.material.floatingactionbutton.FloatingActionButton
경고 메시지가 나타납니다.
VisibilityAwareImageButton.setVisibility는 동일한 라이브러리 그룹 (groupId = com.google.android.material)에서만 호출 할 수 있습니다.
import com.google.android.material.floatingactionbutton.FloatingActionButton
import android.view.View
class MainActivity : AppCompatActivity() {
lateinit var demoFab: FloatingActionButton
override fun onCreate(savedInstanceState: Bundle?) {
demoFab = findViewById(R.id.demoFab)
demoFab.visibility = View.VISIBLE // the warning is here
}
}
검색을 시도했지만 UI 가시성 변경에 응답하는 유일한 검색 결과는 다음과 같습니다.
나는 VISIBLE
그 com.google.android.material
패키지에 int 값 이 있고 내가 찾은 유일한 것이 었는지 알 수있는 방법을 탐색하려고 com.google.android.material.floatingactionbutton.FloatingActionButton.VISIBLE
했지만 경고는 여전히 남아 있습니다.
최상위 build.gradle
buildscript {
ext.kotlin_version = '1.2.41'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0-alpha14'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "com.google.gms:oss-licenses:0.9.2"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
mavenCentral()
maven { url "http://oss.sonatype.org/content/repositories/snapshots/" }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
프로젝트 레벨 build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.google.gms.oss.licenses.plugin'
android {
compileSdkVersion 'android-P'
defaultConfig {
applicationId "com.codeforsanjose.maps.pacmap"
minSdkVersion 21
targetSdkVersion 'P'
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
splits {
abi {
enable true
reset()
include 'arm64-v8a', 'armeabi', 'armeabi-v7a', 'mips', 'x86', 'x86_64'
universalApk false
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.0-alpha1'
implementation 'androidx.constraintlayout:constraintlayout:1.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.0-alpha2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha2'
implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:5.5.2'
//implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:6.1.0'
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-locationlayer:0.5.0'
implementation 'com.mapbox.mapboxsdk:mapbox-android-navigation:0.13.0'
implementation 'com.mapbox.mapboxsdk:mapbox-android-navigation-ui:0.13.0'
implementation 'com.google.android.gms:play-services-oss-licenses:15.0.1'
implementation 'com.google.code.gson:gson:2.8.2'
implementation 'com.squareup.moshi:moshi:1.5.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.squareup.retrofit2:converter-moshi:2.4.0'
implementation "com.squareup.retrofit2:adapter-rxjava2:2.3.0"
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'io.reactivex.rxjava2:rxkotlin:2.2.0'
}
편집하다:
Android Studio 버전 3.2 카나리아 14를 사용하고 있습니다.이 버전에 대해보고 된 버그가있는 것 같습니다.이 버그 중 하나 인 것 같습니다.
편집 2 :
Android Studio 버전 3.2 카나리아 15에서 여전히 문제가 발생하지만 show()
and를 사용하여 해결 방법을 찾았습니다.hide()
override fun onCreate(savedInstanceState: Bundle?) {
demoFab = findViewById(R.id.demoFab)
demoFab.show() // this works and doesn't have the warning
}
답변
방법 1 사용
demoFab.show(); // in place of visible
demoFab.hide(); // in place of Invisible suppress the warning/error for me.
방법 2
@SuppressLint("RestrictedApi") // also suppressed the warning
private void setUp() {
....
}
최신 정보:
방법 3 :
demoFab.setVisibility(View.GONE);
demoFab.setVisibility(View.INVISIBLE);
demoFab.setVisibility(View.VISIBLE);
방법 4 :
demoFab.visibility = View.GONE
demoFab.visibility = View.INVISIBLE
demoFab.visibility = View.VISIBLE
답변
보기에 캐스트하는 것만으로도 잘 작동하는 것 같습니다.
(mFloatingActionButton as View).visibility = INVISIBLE
물론 가시성은 다른 구성 요소에 영향을 줄 수 있으므로 다른 구성 요소에 변경 사항을 알리려면 사용 show()
하고 hide()
동시에 사용해야 합니다.
답변
사용하다:
myButton.hide();
myClearButton.hide();
일반적인 예는 다음과 같습니다.
사용자가 입력하거나 EditText 리소스에 초점을 둘 때 버튼 숨기기 및 표시 :
사용자가 입력 중이거나 포커스가 있는지 확인하십시오.
mCommentField.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (hasFocus) {
//user has focused
showBts();
} else {
//focus has stopped perform your desired action
hideButtons();
}
}
});
숨기기 및 표시 버튼 방법 :
private void hideButtons() {
mCommentButton.hide();
mClearButton.hide();
}
private void showBts() {
mCommentButton. show();
mClearButton.show();
그리고 XML에서 사용자가 포커스를 가지고 있거나 입력 할 때만 표시 / 표시되도록 버튼을 기본적으로 보이지 않게 설정하십시오.
android:visibility="invisible"
모범 사례 :
android:visibility="Gone"
가시성을 사용하면 뷰가 레이아웃의 공간을 차지하지 않지만 “보이지 않는”은 레이아웃의 불필요한 공간을 차지합니다.
이 예에서 : 내보기는 ViewHolder에 있으며 recylerview가있는 조각의 버튼을 참조하는 iam
답변
이것은 또한 작동합니다 :
findViewById(R.id.fab).setVisibility(View.GONE);
답변
Kotlin의 경우 확장 방법이 있습니다
fun viewsVisibility(visibility: Int, vararg views: View) {
for (view in views) { view.visibility = visibility }
}
그런 다음 코드에서 다음을 수행 할 수 있습니다
viewsVisibility(View.VISIBLE, demoFab)
viewsVisibility(View.GONE, demoFab)
viewsVisibility(View.INVISIBLE, demoFab, addFab, removeFab)
오류가 사라지고 처리 할보기 목록을 가져와 가시성 상태에 대한 유연성을 제공합니다. 마지막 예제 줄에 표시된 것처럼 한 번에 둘 이상의보기를 처리해야하는 경우가 많습니다.
답변
if(data){
fragmentPendingApprovalDetailsBinding.fabPendingList.show();
}else {
fragmentPendingApprovalDetailsBinding.fabPendingList.hide();
}
답변
에 대한 com.google.android.material.floatingactionbutton.FloatingActionButton
시계
show 및 hide 메소드를 사용하여 FloatingActionButton의 가시성을 애니메이션하십시오. show 애니메이션은 위젯을 키우고 페이드 인하는 반면 hide 애니메이션은 위젯을 축소하여 페이드 아웃합니다.
출처 : https://material.io/develop/android/components/floating-action-button/
에 대한 android.support.design.widget.FloatingActionButton
사용 setVisibility()
방법