অ্যান্ড্রয়েড পি ভিজিবিলিটি ওয়্যারাইমেজবুটন.সেটভিজিবিলিটি একই লাইব্রেরি গ্রুপ থেকে কল করা যেতে পারে


143

আমি নতুন অ্যান্ড্রয়েড পি ফ্লোটিং অ্যাকশনবটনটি ব্যবহার করার চেষ্টা করছি যা এটির একটি অংশ com.google.android.material.floatingactionbutton.FloatingActionButtonএবং আমি এই সতর্কতা পাচ্ছি:

ভিজিবিলিটিঅ্যাওয়ারআইজেজবটন.সেটভিজিবিলিটি কেবল একই লাইব্রেরি গ্রুপ থেকে (গ্রুপআইডি = com.google.android.matory) কল করা যেতে পারে

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

এখানে চিত্র বর্ণনা লিখুন

আমি অনুসন্ধানের চেষ্টা করেছি এবং কেবলমাত্র অনুসন্ধান ফলাফলটি ইউআই দৃশ্যমানতার পরিবর্তনের ক্ষেত্রে সাড়া দেওয়ার ক্ষেত্রে:

ইউআই দৃশ্যমানতার পরিবর্তনের প্রতিক্রিয়া জানায়

আমি কীভাবে দেখতে পেলাম VISIBLEযে সেই com.google.android.materialপ্যাকেজের কোনও মান আছে এবং আমি যে একমাত্র পেয়েছি তা খুঁজে পেতে চেষ্টা করেছি com.google.android.material.floatingactionbutton.FloatingActionButton.VISIBLE, কিন্তু সতর্কতাটি এখনও রয়ে গেছে।

শীর্ষ স্তরের বিল্ড.gradle

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
}

প্রকল্প-স্তরের বিল্ড.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 ব্যবহার করছি It মনে হচ্ছে এই সংস্করণটির জন্য কিছু রিপোর্ট করা বাগ রয়েছে এবং আমি সন্দেহ করি যে এটি তাদের মধ্যে একটি।

সম্পাদনা 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
পঙ্কজ কুমার

অ্যান্ড্রয়েড পি এবং জেটপ্যাকের সাহায্যে, ফ্যাবকে এই প্যাকেজে সরানো হয়েছিল, এটিই আমি ব্যবহার করার চেষ্টা করছি trying বিকাশকারী.অ্যান্ড্রয়েড.
কাইল ফ্যালকনার

@ কাইলফালকোনার ক্যানারি 15 এখন উপলভ্য, আপডেট আপনার সমস্যার সমাধান করতে পারে কিনা তা পরীক্ষা করুন :)
লেভি

2
@ পঙ্কজকুমার ইউপ, এখনও ভাঙা, তবে আমি এর জন্য আরও একটি উপায় পেয়েছি (আমার প্রশ্নের সাথে "সম্পাদনা 2" যুক্ত করেছেন)।
কাইল ফ্যালকোনার

5
এই ইস্যুটি বাগটি বর্ণনা করে: ইস্যুটিয়রেকার.কম.সিসিউস / 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
এটি সুন্দর অ্যানিমেশন যুক্ত করে!
ror

1
হাই, GONE এবং অদৃশ্য পদ্ধতি আছে?
সিয়ারহেই

.Show () ব্যবহার করা সতর্কতা সরিয়ে ফেলতে পারে, তবে একটি সমস্যা রয়েছে: FAB যদি সেট করে থাকে, উদাহরণস্বরূপ XML এ, অ্যান্ড্রয়েড: স্বচ্ছতার জন্য আলফা = "0.5", স্বচ্ছতা তখন কাজ করে না। কীভাবে এই সমস্যার সমাধান করবেন? পরিবর্তে, আমি ডেমোফ্যাব.ভিজিবিলিটি = ভিউ.ভিজিবল ব্যবহার করতে পছন্দ করব যদি .show () অ্যান্ড্রয়েডে কাজ করতে না পারে: আলফা
ফিশার

পদ্ধতিগুলি দেখান এবং লুকান স্ট্যান্ডার্ড ভাসমান ক্রিয়া বোতামগুলির জন্য উপযুক্ত।
ফায়ারস্টর্মএক্সজেড 21

9

দেখে মনে হচ্ছে এটি ঠিক কাজ করার জন্য সূক্ষ্ম কাজ করে।

(mFloatingActionButton as View).visibility = INVISIBLE

অবশ্যই আপনাকে অবশ্যই মনে রাখতে হবে যে দৃশ্যমানতাটি অন্যান্য উপাদানগুলিকে প্রভাবিত করতে পারে, তাই আপনার সম্ভবত ব্যবহার করা উচিত show()এবং hide()একই সময়ে অন্যান্য উপাদানগুলি পরিবর্তনের বিষয়ে অবহিত রয়েছে তা নিশ্চিত করার জন্য।


5
আমি যদি অদৃশ্যতার পরিবর্তে GONE এ দৃশ্যমানতা সেট করতে চাই তবে কী হবে?
চার্লি 11

1
@ চর্লি আপনি ভাসমান অ্যাকশন বোতামটি থেকে 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();

এবং আপনার এক্সএমএলে, বোতামগুলি ডিফল্টরূপে অদৃশ্যতে সেট করুন যাতে কোনও ব্যবহারকারীর ফোকাস থাকে বা টাইপ করার সময় তারা কেবল প্রদর্শন / প্রদর্শন করে:

android:visibility="invisible"

ভাল অভ্যাস:

 android:visibility="Gone"

দৃশ্যমানতা ব্যবহারের অর্থ হ'ল আপনার দৃশ্যটি আপনার বিন্যাসে কোনও স্থান গ্রহণ করবে না যখন "অদৃশ্য" আপনার বিন্যাসে অপ্রয়োজনীয় স্থান গ্রহণ করবে

এই উদাহরণে: আমার দর্শনগুলি একটি ভিউহোল্ডারে রয়েছে এবং আইএএম পুনরায় পুনর্বিবেচনার সাথে এএ খণ্ড থেকে বোতামগুলি উল্লেখ করছে


3

এটিও কাজ করে:

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

হ্যাঁ এটি করে I আমি আমার উদাহরণে একটি খণ্ড ব্যবহার করছিলাম: সেটভিশিবিলিটি (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

দৃষ্টিপাত

ফ্লোটিংএকশনবটনের দৃশ্যমানতা অ্যানিমেটেড করার জন্য শো এবং লুকানোর পদ্ধতিগুলি ব্যবহার করুন। শো অ্যানিমেশনটি উইজেটটি বাড়ায় এবং এতে ম্লান হয়ে যায়, যখন লুকানো অ্যানিমেশনটি উইজেটকে সঙ্কুচিত করে এবং বিবর্ণ হয়ে যায়।

সূত্র: https://matory.io/develop/android/comp اجزا স / ফ্লোটিং- অ্যাকশন- বাটন /

জন্য android.support.design.widget.FloatingActionButton ব্যবহার setVisibility()পদ্ধতি


0

আমার জন্য উপরের পদ্ধতিগুলি কাজ করে না তাই এটি কার্যকর করার জন্য আমি একটি এক্সটেনশন ফাংশন তৈরি করেছি।

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

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

এখন যেমন কল

binding.fabAdded.showView()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.