wake-up-neo.com

Android P visibleawareimagebutton.setVisibility kann nur von derselben Bibliotheksgruppe aufgerufen werden

Ich versuche, den neuen Android P FloatingActionButton zu verwenden, der Teil des com.google.Android.material.floatingactionbutton.FloatingActionButton ist, und erhalte folgende Warnung:

VisibilityAwareImageButton.setVisibility kann nur aus 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
    }
}

 enter image description here

Ich habe die Suche versucht 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 es einen VISIBLE int-Wert in diesem com.google.Android.material-Paket gibt. Der einzige, den ich gefunden habe, war com.google.Android.material.floatingactionbutton.FloatingActionButton.VISIBLE.

Build.gradle auf oberster 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 für diese Version einige Fehler gemeldet wurden, und ich vermute, dass dies einer von ihnen ist.

edit 2:

Das Problem mit der Android Studio Version 3.2 Canary 15 ist immer noch vorhanden. Ich habe jedoch eine Problemumgehung gefunden, indem show() und hide() verwendet wurden.

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

Methode 1 anwenden

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

und Methode 2

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

Das funktioniert auch:

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

Scheint gut zu funktionieren, nur um es in einen Blick zu werfen.

(mFloatingActionButton as View).visibility = INVISIBLE

Natürlich müssen Sie berücksichtigen, dass die Sichtbarkeit andere Komponenten beeinflussen kann. Sie sollten wahrscheinlich show() und hide() gleichzeitig verwenden, um sicherzustellen, dass andere Komponenten über die Änderung benachrichtigt werden.

1
Andreas

Für Kotlin habe ich eine Erweiterungsmethode

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

Dann in dem Code können Sie Folgendes tun

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

Der Fehler wird verschwunden sein. Dies gibt die Flexibilität für jeden Sichtbarkeitsstatus sowie das Aufnehmen einer Liste von zu behandelnden Ansichten. Es gibt eine Menge Zeiten, zu denen ich mehr als eine Ansicht gleichzeitig bearbeiten muss, wie in der letzten Beispielzeile gezeigt.

0
Kevin

Benutzen:

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

Ein typisches Beispiel wäre:

Ein- und Ausblenden von Schaltflächen, wenn der Benutzer ein Eingabefeld eingibt oder sich auf eine EditText-Ressource konzentriert:

prüfen Sie, ob der Benutzer schreibt oder Fokus hat:

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


    });

Schaltflächenmethoden ausblenden und anzeigen:

private void hideButtons() {

    mCommentButton.hide();
    mClearButton.hide();
}

private void showBts() {

    mCommentButton. show();
    mClearButton.show();

Setzen Sie die Schaltflächen in Ihrer XML-Datei standardmäßig auf "unsichtbar", sodass sie nur angezeigt/angezeigt werden, wenn ein Benutzer den Fokus hat oder tippt:

Android:visibility="invisible"
0
RileyManda
if(data){
            fragmentPendingApprovalDetailsBinding.fabPendingList.show();
        }else {
            fragmentPendingApprovalDetailsBinding.fabPendingList.hide();
        }
0
Soumen Das