Saya mencoba menggunakan Android P FloatingActionButton baru yang merupakan bagian dari com.google.android.material.floatingactionbutton.FloatingActionButton
dan saya mendapatkan peringatan ini:
VisibilityAwareImageButton.setVisibility hanya dapat dipanggil dari grup perpustakaan yang sama (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
}
}
Saya sudah mencoba mencari dan satu-satunya hasil pencarian dalam menanggapi perubahan visibilitas UI:
Tanggapi perubahan visibilitas UI
Saya mencoba mengeksplorasi bagaimana saya bisa melihat apakah ada VISIBLE
nilai int dalam com.google.android.material
paket itu dan satu-satunya yang saya temukan adalah com.google.android.material.floatingactionbutton.FloatingActionButton.VISIBLE
, tetapi peringatan itu tetap ada.
Build.gradle tingkat atas
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 tingkat proyek
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'
}
edit:
Saya harus mencatat bahwa saya menggunakan Android Studio versi 3.2 kenari 14. Sepertinya ada beberapa bug yang dilaporkan untuk versi ini, dan saya menduga ini adalah salah satunya.
edit 2:
Masalah masih ada dengan Android Studio versi 3.2 kenari 15, tapi saya menemukan solusi untuk itu menggunakan show()
danhide()
override fun onCreate(savedInstanceState: Bundle?) {
demoFab = findViewById(R.id.demoFab)
demoFab.show() // this works and doesn't have the warning
}
sumber
Jawaban:
Menggunakan Metode 1
dan Metode 2
memperbarui:
Metode 3:
Metode 4:
sumber
Tampaknya berfungsi dengan baik hanya untuk melemparkannya ke tampilan.
(mFloatingActionButton as View).visibility = INVISIBLE
Tentu saja Anda harus ingat bahwa visibilitas dapat mempengaruhi komponen lain, jadi Anda mungkin harus menggunakan
show()
danhide()
pada saat yang sama untuk memastikan komponen lain diberitahu tentang perubahan tersebut.sumber
Menggunakan:
Contoh tipikal adalah:
Menyembunyikan dan menampilkan tombol saat pengguna mengetik atau memiliki fokus pada sumber daya EditText:
periksa apakah pengguna mengetik atau memiliki fokus:
Sembunyikan dan Tampilkan metode tombol:
Dan di xml Anda, atur tombol menjadi tak terlihat secara default sehingga hanya ditampilkan / ditampilkan ketika pengguna memiliki fokus atau mengetik:
Praktek terbaik:
Menggunakan visibilitas yang hilang berarti tampilan Anda tidak memakan ruang pada tata letak Anda sementara "tidak terlihat" akan mengambil ruang yang tidak perlu pada tata letak Anda
Dalam contoh ini: My Views berada dalam ViewHolder dan saya merujuk tombol-tombol dari sebuah fragmen dengan recylerview
sumber
Ini juga berfungsi:
sumber
Untuk Kotlin saya punya metode ekstensi
Kemudian di dalam kode Anda dapat melakukan hal berikut
Kesalahan akan hilang dan ini memberikan fleksibilitas untuk setiap kondisi visibilitas bersama dengan mengambil daftar pandangan untuk ditangani. Ada banyak kali saya perlu menangani lebih dari satu tampilan pada suatu waktu seperti yang ditunjukkan pada baris contoh terakhir.
sumber
sumber
Untuk
com.google.android.material.floatingactionbutton.FloatingActionButton
Visibilitas
Gunakan metode pertunjukan dan sembunyikan untuk menghidupkan visibilitas FloatingActionButton. Animasi acara menumbuhkan widget dan memudar, sedangkan animasi hide menyusut widget dan memudar.
Sumber: https://material.io/develop/android/components/floating-action-button/
Untuk
android.support.design.widget.FloatingActionButton
menggunakansetVisibility()
Metodesumber
Bagi saya metode di atas tidak berfungsi jadi saya membuat fungsi ekstensi untuk membuatnya berfungsi.
sekarang panggilan seperti
sumber