एंड्रॉइड पी विज़ुअलवेयरम्यूजब्यूटन.सेट विजिबिलिटी को केवल उसी लाइब्रेरी समूह से बुलाया जा सकता है


143

मैं नए Android P फ़्लोटिंगएशनबटन का उपयोग करने की कोशिश कर रहा हूँ जो कि इसका एक हिस्सा है com.google.android.material.floatingactionbutton.FloatingActionButtonऔर मुझे यह चेतावनी मिल रही है:

VisibilityAwareImageButton.setVisibility को केवल एक ही लाइब्रेरी समूह (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
    }
}

यहां छवि विवरण दर्ज करें

मैंने खोज करने का प्रयास किया है और UI दृश्यता परिवर्तनों के जवाब के संबंध में एकमात्र खोज परिणाम है:

UI दृश्यता परिवर्तनों के प्रति प्रतिक्रिया

मैंने यह पता लगाने की कोशिश की कि मैं कैसे देख सकता हूं VISIBLEकि क्या उस com.google.android.materialपैकेज में कोई अंतर था और मुझे जो एकमात्र मिला था com.google.android.material.floatingactionbutton.FloatingActionButton.VISIBLE, लेकिन चेतावनी अभी भी बनी हुई है।

शीर्ष स्तर का बिल्ड.ग्रेड

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

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'
}

संपादित करें:

मुझे ध्यान देना चाहिए कि मैं एंड्रॉइड स्टूडियो संस्करण 3.2 कैनरी 14. का उपयोग कर रहा हूं। ऐसा लगता है कि इस संस्करण के लिए कुछ रिपोर्ट किए गए बग हैं, और मुझे संदेह है कि यह उनमें से एक है।

2 संपादित करें:

समस्या अभी भी एंड्रॉइड स्टूडियो संस्करण 3.2 कैनरी 15 के साथ मौजूद है, लेकिन मुझे इसका उपयोग करने के लिए show()औरhide()

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

सही पैकेज है android.support.design.widget.FloatingActionButton
पंकज कुमार

एंड्रॉइड पी और जेटपैक के साथ, फैब को इस पैकेज में स्थानांतरित किया गया था, यही वह है जिसका मैं उपयोग करने की कोशिश कर रहा हूं। डेवलपर
काइल फाल्कनर

@ केलीफ़ाल्कर कैनरी 15 अब उपलब्ध है, जाँच करें कि क्या अद्यतन आपकी समस्या को ठीक कर सकता है :)
लेवी मोरेरा

2
@ पंकजकुमार यूप, अभी भी टूटा हुआ है, लेकिन मुझे इसके लिए एक और समाधान मिला (मेरे सवाल में "संपादित 2")।
काइल फाल्कनर

5
यह समस्या बग के बारे में बताती है: जारी करने वाला। URLissues / 115924750 दुर्भाग्य से, इसका कोई हल या समाधान नहीं है, इसलिए शायद इससे प्रभावित होने वाले हर व्यक्ति को इसे देखना चाहिए।
क्रिस्टोफ़क

जवाबों:


266

विधि 1 का उपयोग करना

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

और विधि 2

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

अपडेट करें:

विधि 3:

demoFab.setVisibility(View.GONE);
demoFab.setVisibility(View.INVISIBLE);
demoFab.setVisibility(View.VISIBLE);

विधि 4:

demoFab.visibility = View.GONE
demoFab.visibility = View.INVISIBLE
demoFab.visibility = View.VISIBLE

2
यह भी सुंदर एनीमेशन जोड़ता है!
रोर

1
नमस्ते, वहाँ गया है और अदृश्य तरीके?
सिरोही

.Show () का उपयोग करके चेतावनी को हटाया जा सकता है, लेकिन एक समस्या है: यदि FAB ने XML में, उदाहरण के लिए सेट किया है, तो पारदर्शिता के लिए android: अल्फा = "0.5", पारदर्शिता नहीं है। इस समस्या से कैसे निपटा जाए? इसके बजाय, मैं DemoFab.visibility = View.VISIBLE का उपयोग करना पसंद करूंगा। अगर .show () Android पर काम नहीं कर सकता है: अल्फा
फिशर

विधियाँ दिखाने और छिपाने के मानक फ्लोटिंग एक्शन बटन के लिए एकदम सही हैं।
फायरस्टॉर्मएक्सवाईजेड

9

सिर्फ एक दृश्य में डालने के लिए ठीक काम करने लगता है।

(mFloatingActionButton as View).visibility = INVISIBLE

बेशक आपको यह याद रखने की आवश्यकता है कि दृश्यता अन्य घटकों को प्रभावित कर सकती है, इसलिए आपको संभवतः उपयोग करना चाहिए show()और hide()साथ ही यह सुनिश्चित करने के लिए कि अन्य घटकों को परिवर्तन के बारे में सूचित किया जाए।


5
क्या होगा अगर मैं INVISIBLE के बजाय GONE को दृश्यता सेट करना चाहता हूं?
चार्ली

1
@charlie फ्लोटिंग एक्शन बटन से आपको GONE और INVISIBLE में क्या अंतर है? एक फैब आमतौर पर बाकी लेआउट से ऊपर होता है, इसलिए इसमें कोई जगह नहीं होती है।
अविश्वसनीय जन

6

उपयोग:

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

एक विशिष्ट उदाहरण होगा:

उपयोगकर्ता टाइप करने या एडिट टेक्स्ट संसाधन पर ध्यान केंद्रित करने पर बटन छिपाना और दिखाना:

यदि उपयोगकर्ता टाइप कर रहा है या ध्यान केंद्रित है, तो जांचें:

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


    });

बटन विधि छिपाएँ और दिखाएँ:

private void hideButtons() {

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

private void showBts() {

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

और अपने xml में, डिफ़ॉल्ट रूप से अदृश्य करने के लिए बटन सेट करें ताकि वे केवल तभी प्रदर्शित / शो करें जब कोई उपयोगकर्ता ध्यान केंद्रित कर रहा हो या टाइप कर रहा हो:

android:visibility="invisible"

सर्वश्रेष्ठ प्रणालियां:

 android:visibility="Gone"

दृश्यता का उपयोग करने का अर्थ है कि आपका दृश्य आपके लेआउट पर कोई स्थान नहीं लेता है जबकि "अदृश्य" आपके लेआउट पर अनावश्यक स्थान लेगा

इस उदाहरण में: My Views एक ViewHolder में हैं और iam एक recylerview के साथ एक टुकड़े से बटन को संदर्भित करता है


3

यह भी काम करता है:

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

हां यह करता है। मैं अपने उदाहरण में एक टुकड़ा का उपयोग कर रहा था: setVisibility (View.GONE); हमेशा अंशों में काम नहीं करता है, खासकर जब आपने अपने विचारों को एक ऐसे दृश्य फ़ोल्डर में घोषित किया है जो अपने स्वयं के एक अलग वर्ग में है और आप केवल देखने वाले से संदर्भित कर रहे हैं।
रिलेमाँडा

0

कोटलिन के लिए मेरे पास एक विस्तार विधि है

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

फिर उस कोड में आप निम्नलिखित कार्य कर सकते हैं

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

त्रुटि दूर हो जाएगी और यह किसी भी दृश्यता की स्थिति के लिए लचीलेपन के साथ-साथ विचारों की एक सूची को संभालने के लिए देता है। कई बार मुझे एक बार में एक से अधिक बार देखने की आवश्यकता होती है जैसा कि अंतिम उदाहरण लाइन में दिखाया गया है।



0

के लिये com.google.android.material.floatingactionbutton.FloatingActionButton

दृश्यता

फ्लोटिंगएशनबटन की दृश्यता को चेतन करने के लिए शो और छिपाने के तरीकों का उपयोग करें। शो एनीमेशन विजेट को बढ़ाता है और इसे fades करता है, जबकि छिपा एनीमेशन विजेट को सिकोड़ता है और इसे बाहर निकालता है।

स्रोत: https://material.io/develop/android/compenders/floating-action-button/

के लिए android.support.design.widget.FloatingActionButton उपयोग setVisibility()विधि


0

मेरे लिए ऊपर के तरीके काम नहीं करते थे इसलिए मैंने इसे काम करने के लिए एक एक्सटेंशन फ़ंक्शन बनाया।

fun View.showView() {
    this.visibility = View.VISIBLE
}

fun View.hideView() {
    this.visibility = View.GONE
}

अब जैसे बुलाओ

binding.fabAdded.showView()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.