Appcompatv7 - v21 নেভিগেশন ড্রয়ার হ্যামবার্গার আইকন দেখাচ্ছে না


101

আমি সর্বশেষ অ্যাপকম্প্যাট সমর্থন লাইব্রেরি সহ ললিপপ স্টাইলের নেভিগেশন ড্রয়ারটি প্রয়োগ করছি তবে সমস্যা হ্যামবার্গার আইকনটি কখনই প্রদর্শিত হয় না। কেবল পিছনে আইকন দেখানো হয়।

এটি আমার ক্রিয়াকলাপের কোড

import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.view.View;

public class Home extends ActionBarActivity {

private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    initViews();
}


private void initViews(){

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);


    toolbar.setTitleTextColor(getResources().getColor(android.R.color.white));
    setSupportActionBar(toolbar);

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,toolbar ,  R.string.drawer_open, R.string.drawer_close) { 

        /** Called when a drawer has settled in a completely closed state. */ 
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            //getActionBar().setTitle(mTitle);
            //invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        } 

        /** Called when a drawer has settled in a completely open state. */ 
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            //getActionBar().setTitle(mDrawerTitle);
            //invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        } 
    }; 


    // Set the drawer toggle as the DrawerListener 
    mDrawerLayout.setDrawerListener(mDrawerToggle);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setHomeButtonEnabled(true); 

 }
}

এটি আমার শৈলীর ফাইল

 <resources>
 <!-- Application theme. -->
<style name="Theme.Test" parent="@style/Theme.AppCompat.Light">

    <!-- customize the color palette -->
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
    <item name="windowActionBar">false</item>
    <item name="drawerArrowStyle">@style/Theme.Test.DrawerArrowStyle</item>
</style>

<style name="Theme.Test.DrawerArrowStyle" parent="@style/Widget.AppCompat.DrawerArrowToggle">
    <item name="spinBars">true</item>
    <item name="color">@android:color/white</item>
</style>

লেআউট ফাইল

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize"
    app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:layout_below="@+id/toolbar">

    <!-- The main content view -->

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <!-- The navigation drawer -->

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#111"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>

</RelativeLayout>

নেভিগেশন ড্রয়ারের পিছনে বোতাম দেখানো হচ্ছে

নেভিগেশন ড্রয়ারের পিছনে বোতাম দেখানো হচ্ছে

উভয় ক্ষেত্রেই কেবল পিছনের তীরটি দেখানো হয়েছে, আমি অনেকগুলি পোস্ট পড়েছি তবে কিছুই মনে হয় না কোনও পার্থক্য রয়েছে। কোন সাহায্য প্রশংসা করা হবে।

উত্তর:


148

আপনাকে কল করা দরকার

mDrawerToggle.syncState();

2
আমার অনুমান করা হয়েছে অনাবৃত ক্লিক করা () এবং অনড্রোয়ার ওপেনড ()
পল ভেরেস্ট

14
আপনি আপনার সূচনা করার ঠিক পরেActionBarDrawerToggle
পেড্রো অলিভিয়র

1
ওহে! আমরা কল না করেই এটি হ্যামবার্গার আইকনটি দেখাতে পারি mDrawerToggl.syncState(), আসলে আমি সরঞ্জাম বারে নেভিগেশন ড্রয়ারটি ওভারলে হিসাবে দেখছি যাতে আমার ক্ষেত্রে অ্যানিমেশনটির প্রয়োজন হয় না।
শাজিল আফজাল

1
হতে পারে আপনার সমস্যাটি আর একটি @ অ্যালেক্সভিপারল is এটি আপনার পক্ষে কাজ করে নি, কারণ ডাউনভোট করার দরকার নেই। হেল, যদি আমি সমস্ত উত্তরগুলি আমার পক্ষে কার্যকর না করি তবে তা আমার পক্ষে কার্যকর হবে না ....
পেড্রো অলিভিরা

1
@ পেড্রোলিভেরা কি ভোট বাটনের উপরে / ডাউন ব্যবহারের ক্ষেত্রে নয়?
অ্যালেক্সভিপার্ল

19

নিশ্চিত হয়ে নিন যে আপনি সঠিক ড্রয়ার টগল আমদানি করছেন।

আমি যখন ভি 4 সংস্করণটি আমদানি করেছি তখন আমার তীরটি ছিল (নীচে)।

import android.support.v4.app.ActionBarDrawerToggle;

এটিতে (নীচে, v7) পরিবর্তন করা আমার সমস্যাটি স্থির করেছে।

import android.support.v7.app.ActionBarDrawerToggle;

14

আপনি কল করেছেন তা নিশ্চিত করুন

mDrawerToggle.syncState();

কল করার পরে

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
getSupportActionBar().setHomeButtonEnabled(true); 

টুলবারকে অ্যাকশনবার হিসাবে সেট না করেই, হ্যামবার্গারকে অঙ্কনযোগ্য দেখানো সম্ভব?
অ্যান্ড্রয়েড বিকাশকারী

13

অ্যাকশনবারড্রওয়ারটগল ব্যবহার করার সময়, আপনাকে অবশ্যই পোস্টপ্রেট () এবং অনকফিগারেশনচেনজড () এর সময় এটি কল করতে হবে

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // Pass any configuration change to the drawer toggls
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

এবং onOptionsItemSelectedখুব।
ব্রেইস গাবিন

আমার জন্য সাহায্য না। অ্যান্ড্রয়েড 6.0
a_subscriber

9

যেহেতু আমার ন্যাভিগেশনড্রেয়ার একটি ক্রিয়াকলাপ না করে একটি খণ্ড প্রসারিত করছিল তাই আমি পোস্টক্রিয়েটকে ওভাররাইড করতে পারিনি। নীচে আমি কি করেছি।

   ActionBar actionBar = getActionBar();
   actionBar.setDisplayHomeAsUpEnabled(true); // this sets the button to the    back icon
   actionBar.setHomeButtonEnabled(true); // makes it clickable
   actionBar.setHomeAsUpIndicator(R.drawable.ic_drawer);// set your own icon

আশা করি এটা সাহায্য করবে!


আপনি কেন ভাবছেন যে এটি জিজ্ঞাসাকারীকে সহায়তা করবে কেন সে সম্পর্কে কিছুটা প্রসারিত করুন?
মিকেল ওহলসন

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

টুলবারকে অ্যাকশনবার হিসাবে তৈরি না করে আপনি কীভাবে সরঞ্জামদণ্ডে হ্যামবার্গারকে আঁকতে সক্ষম দেখান?
অ্যান্ড্রয়েড বিকাশকারী

6

অপশন আইটেমসিলিগ্রেড পদ্ধতিতে ওভাররাইড করতে ভুলে যাবেন না এবং চেক করুন বার্ড্র্যাভারটগল ক্লিক করা হয়েছে কিনা, এই ক্ষেত্রে সত্যে ফিরে আসুন অন্যথায় ক্রিয়াকলাপটি শেষ হয়ে যাবে।

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (actionBarDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

3
ওয়ান-লাইনার:return actionBarDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item)
গ্রেগস্লোম

5

আপনি কেবল এটি ব্যবহার করতে পারেন:

// Defer code dependent on restoration of previous instance state.
mDrawerLayout.post(new Runnable() {
    @Override
    public void run() {
        mDrawerToggle.syncState();
        getActionBar().setHomeAsUpIndicator(R.drawable.ic_drawer);
    }
});

mDrawerToggle.syncState () এর পরে কোড সরান এবং আপনি যেতে ভাল good
আহমদ জামিল আল রাশিদ

3

অ্যাকশনবারড্রওয়ারটগল সহ, পোস্ট পদ্ধতিটি ব্যবহার নিশ্চিত করে নিন:

mDrawerLayout.post(new Runnable() {
   @Override
   public void run() {
       mDrawerToggle.syncState();
   }
});

এটি আমার পক্ষে কাজ করেছিল! এটি এবং এটি ব্যবহার করে করা একটি কাজ অপসারণ setHomeAsUpIndicator(R.drawable.ic_menu/ic_back)হ'ল টুকরাটির মধ্যে স্যুইচ করার সময় যে আইকনটি ভান করা হয়েছিল তা জোর করে। তবে নতুন অ্যানিমেটেড বার্গার আইকনে আপডেট হওয়ার পরে, এটি কাজটি করে না।
জোটা


3

mDrawerToggle.syncState() আমার পক্ষে কাজ করেনি, তবে শেষ পর্যন্ত এটি নিয়ে কাজ করতে পেরেছি:

getSupportActionBar().setHomeAsUpIndicator(R.drawable.hamburger_icon);

আমি অবশ্য কোনও সরঞ্জামদণ্ড ব্যবহার করছিলাম না।


কোডের এই লাইনটি আমার দিনটি বাঁচিয়েছে। আমি আমার গ্রিপ কোডটি অ্যান্ড্রয়েড স্টুডিওতে রূপান্তরিত করেছি এবং হঠাৎ আমার ড্রয়ার টগল বোতামটি স্বয়ংক্রিয়ভাবে তীরতে রূপান্তরিত হয়েছে। কোডের এই লাইনটি যুক্ত করার পরে এখন এটি ঠিকঠাক কাজ করছে। অনেক ধন্যবাদ @ জোহান লিহে
হিতেশ

3

আমিও একইরকম সমস্যা পেয়েছি, আমার ক্ষেত্রে সমস্যাটি ছিল, অ্যাকশনবার্টোগল শুরু করার সময়, আমি বৈধ সরঞ্জামদণ্ড যুক্তিটি পাস করছিলাম না (টুলবারটি পরে শুরু করা হয়েছিল), যথাযথ, নন-নাল টুলবার ছাড়াই, অ্যাকশনবারটগল হ্যামবার্গার আইকন তৈরি করতে ব্যর্থ হবে।

actionBarToggle = ActionBarDrawerToggle(this, mDrawer, toolbar, 
R.string.drawer_open, R.string.drawer_close);

1

অনরেস্টোরআইনস্ট্যান্সস্টেটটি আসার পরে আপনি লিঙ্কযুক্ত ড্রয়ারলয়েটের অবস্থার সাথে সূচকটি সিঙ্ক্রোনাইজ করতে আপনার ক্রিয়াকলাপের পোস্টপ্রেসেট থেকে সিঙ্কস্টেট () কল করতে পারেন।

@Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

এছাড়াও অ্যাকশনবার্ড্রওয়ারটগল সরাসরি ড্রয়ারলাউট.ড্রেওয়ারলিস্টনার হিসাবে ব্যবহার করা যেতে পারে, বা আপনি যদি ইতিমধ্যে আপনার নিজের শ্রোতা সরবরাহ করে থাকেন তবে আপনার নিজের থেকে শ্রোতার প্রতিটি পদ্ধতির মাধ্যমে কল করুন।

private ActionBarDrawerToggle mDrawerToggle;
private DrawerLayout mDrawerLayout;
  .
  .
  .
  .
mDrawerLayout.setDrawerListener(mDrawerToggle);

    mDrawerLayout.post(new Runnable() {
        @Override
        public void run() {
            mDrawerToggle.syncState();
        }
    });

1

অ্যাকশন বার মেনুতে ক্লিক করার সময় নেভিগেশন ড্রয়ারটি প্রদর্শিত হচ্ছে না। এটি আমার জন্য এটি স্থির করে দিয়েছে।

   @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
      //add your switch statement


        return super.onOptionsItemSelected(item);
    }

1

এটি আমার পক্ষে কাজ করে। আমি অ্যাকশনবার্টিভিটির পরিবর্তে অ্যাপকম্প্যাটঅ্যাক্টিভিটি বাড়িয়েছি।

mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,null, R.string.drawer_opened, R.string.drawer_closed) {
    @Override
    public void onDrawerOpened(View drawerView) {
        super.onDrawerOpened(drawerView);
        if( getSupportActionBar()!= null)
        getSupportActionBar().setTitle(R.string.drawer_opened);
        mActionBarDrawerToggle.syncState();
    }

    @Override
    public void onDrawerClosed(View drawerView) {
        super.onDrawerClosed(drawerView);
        if(getSupportActionBar() != null)
            getSupportActionBar().setTitle(R.string.drawer_closed);
            mActionBarDrawerToggle.syncState();

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