কীভাবে সরঞ্জামদণ্ডের বাড়ির আইকনের রঙ পরিবর্তন করতে হয়


108

আমি একটি android.support.v7.widget.Toolbar ব্যবহার করছি এবং হ্যামবার্গার আইকনের রঙটি কীভাবে সাদা করা যায় এই পোস্টটি থেকে শিখেছি , তবে আমি কল করার সময় উপরে / পিছনের তীরটি গা dark় বর্ণ থেকে যায়

setDisplayHomeAsUpEnabled(true);

আমি তীরটিও কীভাবে সাদা করতে পারি?

আমি যখন সেটডিস্পলহোমএএসএপএবলড () কল করি তখন আমার সরঞ্জামদণ্ডটি দেখতে কেমন লাগে:

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

... এবং এখানে আমার স্টাইলস.এমএমএল ফাইলের সম্পর্কিত অংশ রয়েছে:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">#194C5F</item>
    <item name="colorAccent">@color/accent</item>
    <item name="drawerArrowStyle">@style/WhiteDrawerIconStyle</item>
</style>

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

2
আপনি সাদা তীর পিএনজি আইকন ব্যবহার করতে পারেন এবং একটি কালো দিয়ে প্রতিস্থাপন করতে পারেন।
সুরেন্দ্র কুমার

1
আমি এটি এড়ানোর চেষ্টা করছি এবং কেবল একটি রঙকে একটি শৈলী হিসাবে ইঙ্গিত করছি ... যদি কেবলমাত্র আমি জানি যে আমি এটি করতে পারি অ্যাকশনবারড্রওয়ারটোগল.সেটহোম এএসপিআইডিফিকেশন (আর। ডিগ্রোয়েবল.আরো);
জোশুয়া ডাব্লু

... এছাড়াও png /com.android.support/appcompat-v7/21.0.3/res/drawable-xxxhdpi/abc_ic_ab_back_mtrl_am_alpha.png সাদা প্রদর্শিত হবে
জোশুয়া ডাব্লু

@ জোশুয়াউইটার ধন্যবাদ এটি আমার সমস্যার সমাধান করেছে, আপনি কি দয়া করে আমাকে পিছনে বোতামের ক্লিক সনাক্ত করতে সহায়তা করতে পারেন? এখানে আমার প্রশ্ন হচ্ছে stackoverflow.com/questions/29138629/...
user2056563

1
@ জোশুয়াউইটারটি সাদা হলেও তা রঙিন হয়। colorControlNormalমানটি পরিবর্তন করুন
ওশরল

উত্তর:


242

আমি এটি styles.xml সম্পাদনা করে সমাধান করেছি:

<style name="ToolbarColoredBackArrow" parent="AppTheme">
    <item name="android:textColorSecondary">INSERT_COLOR_HERE</item>
</style>

... তারপরে ক্রিয়াকলাপে সরঞ্জামদণ্ড সংজ্ঞায় স্টাইলটি উল্লেখ করুন:

<LinearLayout
    android:id="@+id/main_parent_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/toolbar"
        app:theme="@style/ToolbarColoredBackArrow"
        app:popupTheme="@style/AppTheme"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary"/>

13
এছাড়াও আপনি colorControlNormalপরিবর্তে সেট করতে পারেনandroid:textColorSecondary
এমবেলস্কি

তবে কী পুরো উইজেটের রঙটি ঠিক বদলে যাবে? @ এমবেলস্কি
ডাঃ এএনড্রো

3
@ এমবেলস্কি নোট করুন যে এটির জন্য এপিআই স্তর 21 প্রয়োজন
ফ্রান্সিসকো রোমেরো


হাই সব, আমি আপনার কোড চেষ্টা করেছি কিন্তু আমি প্রয়োজনীয় ফলাফল পাচ্ছি না। আমার টুলবার.এক্সএমএল ফাইলে আমি সেটআপ থিমটি হ'ল অ্যান্ড্রয়েড: থিম=@style/ThemeOverlay.appCompat.Dark.ActionBar এবং আমার স্টাইল.এক্সএমএল ফাইলে আমি আপনার প্রদত্ত কোড লিখেছি কিন্তু নেভিগেশন বারের পিছনে বোতামের রঙ কোনও পরিবর্তন নেই।
দীপক

57

আপনি যা খুঁজছেন তা এখানে is তবে এটি রেডিওবটন ইত্যাদির রঙও পরিবর্তন করে তাই আপনি এটির জন্য কোনও থিম ব্যবহার করতে চাইতে পারেন।

<item name="colorControlNormal">@color/colorControlNormal</item>

11
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি আমি যা খুঁজছিলাম তা অর্জন করে: <শৈলীর নাম = "অ্যাকশনবার থিম" প্যারেন্ট = "থিমওভারলে.অ্যাপকম্প্যাট.ডार्क.অ্যাকশনবার"> <আইটেমের নাম = "colorControlNormal"> ### রঙ ### </item> </style> থিমটি সরাসরি সরঞ্জামদণ্ডে প্রয়োগ করুন।
মাভামার্টেন

1
মূল বৈশিষ্ট্যটি অত্যন্ত গুরুত্বপূর্ণ।
আতরাবতী

36

আমি প্রোগ্রামটিমে এই কোডটি ব্যবহার করে এটি সমাধান করেছি:

final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(Color.parseColor("#FFFFFF"), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(upArrow);

সংশোধন 1:

এপিআই 23 (মার্শমালো) থেকে শুরু করে অঙ্কনযোগ্য উত্সটিতে abc_ic_ab_back_mtrl_am_alphaপরিবর্তন করা হয়েছে abc_ic_ab_back_material


5
এটি একটি সেট করুন। getSupportActionBar().setDisplayHomeAsUpEnabled(true);
ইশান ফার্নান্দো

এই একটি কাজ করবে Fragment? যদি তা হয় তবে আমি এই কোডটি কোথায় রাখব? OnCreateViewপদ্ধতি, বর্গ রুট, অথবা ...?
অ্যান্ড্রয়েডদেবব্রো

1
@ অ্যান্ড্রয়েড ডেভব্রো হ্যাঁ, এটি কেবলমাত্র ওনক্রিয়াট ফাংশনে রাখুন এবং নোমান তাহির যেমনটি পুনর্বিবেচনায় লিখেছিলেন তেমনই রিসোর্সটি আপডেট করার কথা মনে রাখবেন (আরড্র্যাবল.এবসি_আইসি_এব_ব্যাক_ব্যাক_ম্যাট্রাল_ম্যাফালার পরিবর্তে আরটিআরটি): । getActivity ()) getSupportActionBar () setHomeAsUpIndicator (upArrow)।
PayToPwn

14

এই উত্তরটি হয়তো অনেক দেরীতে হয়েছে, তবে আমি এটি কীভাবে করব তা এখানে। সরঞ্জামদণ্ড স্টাইলিং কৌশলটি করবে। নিম্নলিখিত কোড সহ টুলবার.এক্সএমএল তৈরি করুন।

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:layout_alignParentTop="true"
android:layout_gravity="bottom"
local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

এবং স্টাইল.এক্সএমএল এ

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!--
    -->
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
</style>

শেষ অবধি, বিন্যাসের ভিতরে সরঞ্জামদণ্ডটি অন্তর্ভুক্ত করুন

<include
        android:id="@+id/toolbar"
        layout="@layout/toolbar" />

1
কিন্তু অ্যাপ থিমটি কোথাও উল্লেখ করা হয়নি। এটা কি টাইপো?
হেনরি

11

আপনার সরঞ্জামদণ্ডের থিমটি থিমওভারলে.অ্যাপকম্প্যাট.ডार्কে পরিবর্তন করুন

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    android:orientation="vertical"
    app:theme="@style/ThemeOverlay.AppCompat.Dark">

</android.support.v7.widget.Toolbar>

এবং এটি অ্যাক্টিভিটি সেট

mToolbar = (Toolbar) findViewById(R.id.navigation);
setSupportActionBar(mToolbar);

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

9
   <!-- ToolBar -->
    <style name="ToolBarTheme.ToolBarStyle"    parent="ThemeOverlay.AppCompat.Dark.ActionBar">
        <item name="android:textColorPrimary">@android:color/white</item>
        <item name="android:textColor">@color/white</item>
        <item name="android:textColorPrimaryInverse">@color/white</item>
    </style>

পোস্ট করতে খুব দেরি হয়ে গেছে, এটি আমার জন্য পিছনের বোতামের রঙ পরিবর্তন করতে কাজ করেছে


8

ভাল এটি করার আরও একটি সহজ উপায় আছে

drawerToggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.open_drawer, R.string.close_drawer);
arrow = drawerToggle.getDrawerArrowDrawable();

এবং তারপর

arrow.setColor(getResources().getColor(R.color.blue);

7

শৈলীর পরিবর্তনের পরিবর্তে, কেবলমাত্র আপনার ক্রিয়াকলাপে এই দুটি লাইন কোডটি রেখে দিন।

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.arrowleft);

6

আমার সমাধানটি এখানে:

toolbar.navigationIcon?.mutate()?.let {
  it.setTint(theColor)
  toolbar.navigationIcon = it
}

অথবা, আপনি যদি এটির জন্য একটি দুর্দান্ত ফাংশন ব্যবহার করতে চান:

fun Toolbar.setNavigationIconColor(@ColorInt color: Int) = navigationIcon?.mutate()?.let {
    it.setTint(color)
    this.navigationIcon = it
}

ব্যবহার:

toolbar.setNavitationIconColor(someColor)

এটি সর্বোত্তম উত্তর এবং এটি আমার সমস্যা সমাধান করে
Zaraki596

5

এই কোডটি আমার পক্ষে কাজ করে:

public static Drawable changeBackArrowColor(Context context, int color) {
    String resName;
    int res;

    resName = Build.VERSION.SDK_INT >= 23 ? "abc_ic_ab_back_material" : "abc_ic_ab_back_mtrl_am_alpha";
    res = context.getResources().getIdentifier(resName, "drawable", context.getPackageName());

    final Drawable upArrow = context.getResources().getDrawable(res);
    upArrow.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);

    return upArrow;
}

...

getSupportActionBar().setHomeAsUpIndicator(changeBackArrowColor(this, Color.rgb(50, 50, 50)));               
supportInvalidateOptionsMenu();

এছাড়াও, আপনি যদি সরঞ্জামদণ্ডের পাঠ্যের রঙ পরিবর্তন করতে চান:

Spannable spannableString = new SpannableString(t);
spannableString.setSpan(new ForegroundColorSpan(Color.rgb(50, 50, 50)), 0, t.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
toolbar.setText(spannableString);

এপিআই 19 থেকে 25 এর মধ্যে কাজ করা।


0

" Abc_ic_ab_back_matory " পুরানো অঙ্কনযোগ্য আইডি ব্যবহার না করে প্রতিটি এপিআই সংস্করণে নতুন একটি abc_ic_ab_back_matory ব্যবহার করুন । আমি এটি 19, 21, 27 এ পরীক্ষা করেছি এবং নীচে কোড এবং কনফিগারেশনের সাথে দুর্দান্ত কাজ করছি working

  • minSdkVersion = 17
  • টার্গেটএসডকভিশন = 26
  • compileSdkVersion = 27

    public static Drawable changeBackArrowColor(Context context, int color) {
    int res;
    res = context.getResources().getIdentifier("abc_ic_ab_back_material", "drawable", context.getPackageName());
    if (res == 0)
        return null;
    final Drawable upArrow = ContextCompat.getDrawable(context, res);
    upArrow.setColorFilter(ContextCompat.getColor(context, color), PorterDuff.Mode.SRC_ATOP);
    
    return upArrow;

    }


0

এটি ব্যবহার করে দেখুন: নীচে আপনার লেআউটে টুলবারের থিমটি সেট করুন

android:theme = "@android:style/ThemeOverlay.Material.Dark.ActionBar"

আপনি যদি আরও তথ্য চান

মার্টিন বননিনের ওভারফ্লো আইকন রঙের কৌতূহলবহুল ঘটনা

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