Ich versuche, den neuen Android P FloatingActionButton zu verwenden, der Teil von ist, com.google.android.material.floatingactionbutton.FloatingActionButton
und ich erhalte die folgende Warnung:
VisibilityAwareImageButton.setVisibility kann nur von derselben Bibliotheksgruppe aufgerufen werden (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
}
}
Ich habe versucht zu suchen und das einzige Suchergebnis bezieht sich auf die Reaktion auf Änderungen der Sichtbarkeit der Benutzeroberfläche:
https://developer.android.com/training/system-ui/visibility
Ich habe versucht herauszufinden, wie ich feststellen kann , ob VISIBLE
dieses com.google.android.material
Paket einen int-Wert enthält , und der einzige, den ich gefunden habe, war com.google.android.material.floatingactionbutton.FloatingActionButton.VISIBLE
, aber die Warnung bleibt bestehen.
Build.gradle der obersten Ebene
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 auf Projektebene
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'
}
bearbeiten:
Ich sollte beachten, dass ich Android Studio Version 3.2 Canary 14 verwende. Es scheint, dass einige Fehler für diese Version gemeldet wurden, und ich vermute, dass dies einer von ihnen ist.
bearbeiten 2:
Es gibt immer noch ein Problem mit Android Studio Version 3.2 Canary 15, aber ich habe eine Problemumgehung mit show()
und gefundenhide()
override fun onCreate(savedInstanceState: Bundle?) {
demoFab = findViewById(R.id.demoFab)
demoFab.show() // this works and doesn't have the warning
}
quelle
Antworten:
Verwenden von Methode 1
und Methode 2
aktualisieren:
Methode 3:
Methode 4:
quelle
Scheint gut zu funktionieren, nur um es in eine Ansicht zu verwandeln.
(mFloatingActionButton as View).visibility = INVISIBLE
Natürlich müssen Sie daran denken , dass die Sichtbarkeit andere Komponenten beeinflussen kann, so dass Sie wahrscheinlich verwenden sollen ,
show()
undhide()
zur gleichen Zeit , um sicherzustellen , andere Komponenten werden benachrichtigt , der Änderung.quelle
Verwenden:
Ein typisches Beispiel wäre:
Ausblenden und Anzeigen von Schaltflächen, wenn der Benutzer tippt oder sich auf eine EditText-Ressource konzentriert:
Überprüfen Sie, ob der Benutzer tippt oder den Fokus hat:
Methoden zum Ausblenden und Anzeigen von Schaltflächen:
Setzen Sie in Ihrer XML-Datei die Schaltflächen standardmäßig auf unsichtbar, damit sie nur angezeigt / angezeigt werden, wenn ein Benutzer den Fokus hat oder tippt:
Beste Übung:
Wenn Sie die Sichtbarkeit nicht mehr verwenden, nimmt Ihre Ansicht keinen Platz in Ihrem Layout ein, während "unsichtbar" unnötigen Platz in Ihrem Layout einnimmt
In diesem Beispiel: Meine Ansichten befinden sich in einem ViewHolder und ich verweise auf die Schaltflächen eines Fragments mit einer erneuten Ansicht
quelle
Dies funktioniert auch:
quelle
Für Kotlin habe ich eine Erweiterungsmethode
Dann können Sie im Code Folgendes tun
Der Fehler ist behoben und bietet die Flexibilität für jeden Sichtbarkeitsstatus sowie die Aufnahme einer Liste der zu verarbeitenden Ansichten. Es gibt viele Fälle, in denen ich mehr als eine Ansicht gleichzeitig bearbeiten muss, wie in der letzten Beispielzeile gezeigt.
quelle
quelle
Zum
com.google.android.material.floatingactionbutton.FloatingActionButton
Sichtweite
Verwenden Sie die Methoden zum Ein- und Ausblenden, um die Sichtbarkeit eines FloatingActionButton zu animieren. Die Show-Animation vergrößert das Widget und blendet es ein, während die Hide-Animation das Widget verkleinert und ausblendet.
Quelle: https://material.io/develop/android/components/floating-action-button/
Zur
android.support.design.widget.FloatingActionButton
VerwendungsetVisibility()
Methodequelle
Für mich haben die oben genannten Methoden nicht funktioniert, daher habe ich eine Erweiterungsfunktion erstellt, damit sie funktioniert.
Jetzt wie anrufen
quelle