J'essaie d'utiliser le nouvel Android P FloatingActionButton qui fait partie du com.google.android.material.floatingactionbutton.FloatingActionButton
et je reçois cet avertissement:
VisibilityAwareImageButton.setVisibility ne peut être appelé qu'à partir du même groupe de bibliothèques (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
}
}
J'ai essayé la recherche et le seul résultat de la recherche concerne la réponse aux changements de visibilité de l'interface utilisateur:
Répondre aux changements de visibilité de l'interface utilisateur
J'ai essayé d'explorer comment je pourrais voir s'il y avait une VISIBLE
valeur int dans ce com.google.android.material
paquet et la seule que j'ai trouvée l'était com.google.android.material.floatingactionbutton.FloatingActionButton.VISIBLE
, mais l'avertissement demeure.
Build.gradle de niveau supérieur
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 au niveau du projet
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'
}
Éditer:
Je dois noter que j'utilise Android Studio version 3.2 canary 14. Il semble qu'il y ait eu des bogues rapportés pour cette version, et je soupçonne que c'est l'un d'entre eux.
modifier 2:
Le problème existe toujours avec Android Studio version 3.2 canary 15, mais j'ai trouvé une solution de contournement pour cela en utilisant show()
ethide()
override fun onCreate(savedInstanceState: Bundle?) {
demoFab = findViewById(R.id.demoFab)
demoFab.show() // this works and doesn't have the warning
}
la source
Réponses:
Utilisation de la méthode 1
et méthode 2
mettre à jour:
Méthode 3:
Méthode 4:
la source
Semble bien fonctionner juste pour le convertir en vue.
(mFloatingActionButton as View).visibility = INVISIBLE
Bien sûr, vous devez vous rappeler que la visibilité peut affecter d'autres composants, vous devez donc probablement utiliser
show()
ethide()
en même temps pour vous assurer que les autres composants sont informés du changement.la source
Utilisation:
Un exemple typique serait:
Masquage et affichage des boutons lorsque l'utilisateur tape ou se concentre sur une ressource EditText:
vérifier si l'utilisateur tape ou a le focus:
Masquer et afficher les méthodes des boutons:
Et dans votre xml, définissez les boutons sur invisibles par défaut afin qu'ils ne s'affichent / ne s'affichent que lorsqu'un utilisateur a le focus ou est en train de taper:
Meilleur entrainement:
L'utilisation de la visibilité disparue signifie que votre vue ne prend pas de place sur votre mise en page tandis que "invisible" occupera de l'espace inutile sur votre mise en page
Dans cet exemple: Mes vues sont dans un ViewHolder et iam référençant les boutons d'un fragment avec une recylerview
la source
Cela fonctionne également:
la source
Pour Kotlin, j'ai une méthode d'extension
Ensuite, dans le code, vous pouvez faire ce qui suit
L'erreur aura disparu et cela donne la flexibilité pour n'importe quel état de visibilité ainsi que la prise d'une liste de vues à gérer. Il y a de nombreuses fois où j'ai besoin de gérer plus d'une vue à la fois, comme indiqué dans la dernière ligne d'exemple.
la source
la source
Pour
com.google.android.material.floatingactionbutton.FloatingActionButton
Visibilité
Utilisez les méthodes show et hide pour animer la visibilité d'un FloatingActionButton. L'animation de spectacle agrandit le widget et l'aompe, tandis que l'animation de masquage réduit le widget et le fait disparaître.
Source: https://material.io/develop/android/components/floating-action-button/
Pour
android.support.design.widget.FloatingActionButton
utiliser lasetVisibility()
méthodela source
Pour moi, les méthodes ci-dessus ne fonctionnaient pas, j'ai donc créé une fonction d'extension pour la faire fonctionner.
maintenant appelle comme
la source