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




kotlin android-9.0-pie (4)

उपयोग:

 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 के साथ एक टुकड़े से बटन को संदर्भित करता है

मैं नए Android P FloatingActionButton का उपयोग करने की कोशिश कर रहा हूँ जो 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 दृश्यता परिवर्तनों का जवाब देने के लिए एकमात्र खोज परिणाम है:

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

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

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

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
}

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

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)

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


विधि 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() {
    ....
}

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

(mFloatingActionButton as View).visibility = INVISIBLE

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





android-jetpack