Estou tentando usar o novo Android P FloatingActionButton que faz parte do com.google.android.material.floatingactionbutton.FloatingActionButton
e estou recebendo este aviso:
VisibilityAwareImageButton.setVisibility só pode ser chamado do mesmo grupo de bibliotecas (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
}
}
Tentei pesquisar e o único resultado da pesquisa diz respeito a responder às alterações de visibilidade da interface do usuário:
Responder a alterações de visibilidade da interface do usuário
Tentei explorar como pude ver se havia um VISIBLE
valor int nesse com.google.android.material
pacote e o único que encontrei foi com.google.android.material.floatingactionbutton.FloatingActionButton.VISIBLE
, mas o aviso ainda permanece.
Build.gradle de nível superior
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 no nível do projeto
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'
}
editar:
Devo observar que estou usando o canário 14. do Android Studio versão 3.2. Parece que houve alguns bugs relatados para esta versão e suspeito que esse seja um deles.
editar 2:
Ainda existe um problema com o Android Studio versão 3.2 canary 15, mas encontrei uma solução alternativa para ele usando show()
ehide()
override fun onCreate(savedInstanceState: Bundle?) {
demoFab = findViewById(R.id.demoFab)
demoFab.show() // this works and doesn't have the warning
}
fonte
Respostas:
Usando o método 1
e método 2
atualizar:
Método 3:
Método 4:
fonte
Parece funcionar bem apenas para exibi-lo.
(mFloatingActionButton as View).visibility = INVISIBLE
É claro que você precisa se lembrar de que a visibilidade pode afetar outros componentes; portanto, você provavelmente deve usar
show()
ehide()
ao mesmo tempo para garantir que outros componentes sejam notificados da alteração.fonte
Usar:
Um exemplo típico seria:
Ocultando e mostrando botões quando o usuário está digitando ou se concentra em um recurso EditText:
verifique se o usuário está digitando ou tem o foco:
Ocultar e mostrar métodos de botão:
E no seu xml, defina os botões como invisíveis por padrão, para que sejam exibidos / exibidos apenas quando um usuário estiver focado ou digitando:
Melhor prática:
Usar a visibilidade perdida significa que sua visualização não ocupa espaço no layout, enquanto "invisível" ocupa espaço desnecessário no layout
Neste exemplo: Minhas vistas estão em um ViewHolder e iam referenciando os botões de um fragmento com uma visualização de recylerview
fonte
Isso também funciona:
fonte
Para o Kotlin, eu tenho um método de extensão
Em seguida, no código, você pode fazer o seguinte
O erro desapareceu e isso oferece flexibilidade para qualquer estado de visibilidade, além de incluir uma lista de visualizações para lidar. Muitas vezes eu preciso lidar com mais de uma visualização de cada vez, como mostra a linha de exemplo final.
fonte
fonte
Para
com.google.android.material.floatingactionbutton.FloatingActionButton
Visibilidade
Use os métodos show and hide para animar a visibilidade de um FloatingActionButton. A animação do show aumenta o widget e o reduz, enquanto a animação oculta reduz o widget e diminui.
Fonte: https://material.io/develop/android/components/floating-action-button/
Para
android.support.design.widget.FloatingActionButton
usosetVisibility()
Métodofonte
Para mim, os métodos acima não funcionaram, então criei uma função de extensão para fazê-lo funcionar.
agora ligue como
fonte