studio programacion para herramientas fundamentos desarrollo con avanzado aplicaciones android kotlin android-9.0-pie android-jetpack

programacion - manual android studio avanzado



La visibilidad de la visibilidad de Android P se puede realizar solo desde el mismo grupo de bibliotecas (6)

Estoy intentando usar el nuevo Android P FloatingActionButton que forma parte de com.google.android.material.floatingactionbutton.FloatingActionButton y recibo esta advertencia:

VisibilityAwareImageButton.setVisibility solo se puede llamar desde el mismo 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 } }

He intentado buscar y el único resultado de la búsqueda es en lo que respecta a responder a los cambios de visibilidad de la interfaz de usuario:

https://developer.android.com/training/system-ui/visibility

Intenté explorar cómo podía ver si había un valor VISIBLE int en ese paquete com.google.android.material , y el único que encontré fue com.google.android.material.floatingactionbutton.FloatingActionButton.VISIBLE , pero la advertencia todavia esta.

Build.gradle de nivel 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 }

Nivel de proyecto 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'' }

editar:

Debo tener en cuenta que estoy usando Android Studio versión 3.2 canary 14. Parece que ha habido algunos errores reportados para esta versión, y sospecho que es uno de ellos.

edición 2:

El problema aún existe con la versión 3.2 de Android Studio canary 15, pero encontré una solución alternativa utilizando show() y hide()

override fun onCreate(savedInstanceState: Bundle?) { demoFab = findViewById(R.id.demoFab) demoFab.show() // this works and doesn''t have the warning }


Esto también funciona:

findViewById(R.id.fab).setVisibility(View.GONE);


Para Kotlin tengo un método de extensión.

fun viewsVisibility(visibility: Int, vararg views: View) { for (view in views) { view.visibility = visibility } }

Luego en el código puedes hacer lo siguiente

viewsVisibility(View.VISIBLE, demoFab) viewsVisibility(View.GONE, demoFab) viewsVisibility(View.INVISIBLE, demoFab, addFab, removeFab)

El error desaparecerá y esto proporciona la flexibilidad para cualquier estado de visibilidad junto con tomar una lista de vistas para manejar. Hay muchas veces que necesito manejar más de una vista a la vez como se muestra en la línea de ejemplo final.


Parece que funciona bien solo para verlo.

(mFloatingActionButton as View).visibility = INVISIBLE

Por supuesto, debe recordar que la visibilidad puede afectar a otros componentes, por lo que probablemente debería usar show() y hide() al mismo tiempo para asegurarse de que se notifique el cambio a otros componentes.


Usando el Método 1

demoFab.show(); // in place of visible demoFab.hide(); // in place of Invisible suppress the warning/error for me.

y Método 2

@SuppressLint("RestrictedApi") // also suppressed the warning private void setUp() { .... }


Utilizar:

myButton.hide(); myClearButton.hide();

Un ejemplo típico sería:

Ocultar y mostrar botones cuando el usuario está escribiendo o se centra en un recurso EditText:

compruebe si el usuario está escribiendo o tiene el foco:

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(); } } });

Ocultar y mostrar los métodos de botón:

private void hideButtons() { mCommentButton.hide(); mClearButton.hide(); } private void showBts() { mCommentButton. show(); mClearButton.show();

Y en tu xml, configura los botones como invisibles de manera predeterminada para que solo se muestren / muestren cuando un usuario tiene el foco o está escribiendo:

android:visibility="invisible"

Mejores prácticas:

android:visibility="Gone"

Utilizar la visibilidad desaparecida significa que su vista no ocupa espacio en su diseño, mientras que "invisible" ocupará espacio innecesario en su diseño

En este ejemplo: Mis vistas están en un ViewHolder e iam que hacen referencia a los botones de un fragmento con una recylerview


if(data){ fragmentPendingApprovalDetailsBinding.fabPendingList.show(); }else { fragmentPendingApprovalDetailsBinding.fabPendingList.hide(); }