Làm cách nào để _really_ lập trình thay đổi màu chính và màu nhấn trong Android Lollipop?


156

Trước hết, câu hỏi này đặt ra một câu hỏi rất giống nhau. Tuy nhiên, câu hỏi của tôi có một sự khác biệt tinh tế.

Điều tôi muốn biết là liệu có thể lập trình thay đổi colorPrimarythuộc tính của một chủ đề thành một màu tùy ý không?

Vì vậy, ví dụ, chúng ta có:

<style name="AppTheme" parent="android:Theme.Material.Light">
    <item name="android:colorPrimary">#ff0000</item>
    <item name="android:colorAccent">#ff0000</item>
</style>

Khi chạy, người dùng quyết định anh ta muốn sử dụng #ccfffflàm màu chính. Tất nhiên, không có cách nào tôi có thể tạo chủ đề cho tất cả các màu có thể.

Tôi không phiền nếu tôi phải thực hiện các công cụ hacky, như dựa vào nội bộ riêng tư của Android, miễn là nó hoạt động bằng SDK công khai.

Mục tiêu của tôi là cuối cùng có ActionBar tất cả các vật dụng như a CheckBoxđể sử dụng màu chính này.


1
Bạn không biết "nội bộ riêng tư của Android" là gì đối với bản phát hành Android không tồn tại. Đừng cho rằng "nội bộ tư nhân" của L giống như đối với bất cứ điều gì L biến thành về mặt phát hành sản xuất.
CommonsWare

Không, bạn không thể đặt dữ liệu tùy ý vào một chủ đề. Điều đó nói rằng, colorPrimary chỉ được sử dụng cho nền của thanh hành động, màu của thanh ghi lại và màu thông báo và bạn có thể thay đổi tất cả những thứ này một cách linh hoạt.
alanv

2
Tôi nghĩ bạn nên hỏi "Cách thay đổi thuộc tính kiểu trong thời gian chạy" và từ những gì tôi thấy câu trả lời là bạn không thể. Tuy nhiên tôi có một ý tưởng có thể giúp bạn. Sử dụng ContextWrapper tùy chỉnh và cung cấp Tài nguyên riêng. Nhìn vào đây: github.com/negusoft/holoaccent/blob/master/HoloAccent/src/com/ trộm Nói chung, dự án này có thể cho bạn ý tưởng làm thế nào để làm điều đó.
Mikooos

1
Chỉ cần khởi động ở đây, nhưng tất cả XML được chuyển đổi thành các tệp .dex được tải vào ứng dụng Android của bạn dưới dạng các đối tượng java. Điều đó không có nghĩa là chúng ta sẽ có thể tạo và thiết lập toàn bộ chủ đề từ mã cũng như tạo chủ đề từ một nhà máy chưa được viết? Âm thanh như rất nhiều công việc.
G_V

1
@NiekHaarman bạn đã bao giờ tìm ra một cách?
gbhall

Câu trả lời:


187

Chủ đề là bất biến, bạn không thể.


8
Cảm ơn, Chris! Không phải câu trả lời mà tôi đang tìm kiếm, nhưng tôi đoán tôi sẽ phải sống với nó :)
nhaarman

5
Xin chào @Chris Banes, nhưng ứng dụng liên hệ đã thay đổi màu thanh trạng thái và màu thanh công cụ theo màu chủ đề của liên hệ như thế nào? Nếu có thể, tôi nghĩ những gì Niek Haarman cần không quá xa vì anh ta chỉ cần lưu trữ mã màu mà người dùng muốn. Bạn có thể vui lòng giải thích thêm về điều này? Tôi cũng muốn tạo ra một cái gì đó như thế này nhưng tôi thực sự bối rối với nó.
nga

39
Màu thanh trạng thái có thể được thay đổi linh hoạt thông qua Window.setStatusBarColor ().
Chris Banes

9
Có thể tạo ra một chủ đề lập trình?
Andrew Orobator 6/2/2015

3
Và trong khi thay đổi màu sắc thanh trạng thái một cách linh hoạt, bạn cũng có thể thay đổi màu thanh điều hướng thông qua Window.setNavlationBarColor () - API 21 :)
user802421

65

Tôi đọc các bình luận về ứng dụng danh bạ và cách nó sử dụng một chủ đề cho mỗi liên hệ.

Có lẽ, ứng dụng danh bạ có một số chủ đề xác định trước (đối với mỗi màu chính của vật liệu từ đây: http://www.google.com/design/spec/style/color.html ).

Bạn có thể áp dụng một chủ đề trước một phương thức setContentView bên trong phương thức onCreate.

Sau đó, ứng dụng danh bạ có thể áp dụng một chủ đề ngẫu nhiên cho mỗi người dùng.

Phương pháp này là:

setTheme(R.style.MyRandomTheme);

Nhưng phương pháp này có một vấn đề, ví dụ nó có thể thay đổi màu thanh công cụ, màu hiệu ứng cuộn, màu gợn, v.v., nhưng nó không thể thay đổi màu thanh trạng thái và màu thanh điều hướng (nếu bạn cũng muốn thay đổi nó).

Sau đó, để giải quyết vấn đề này, bạn có thể sử dụng phương pháp trước và:

if (Build.VERSION.SDK_INT >= 21) {
        getWindow().setNavigationBarColor(getResources().getColor(R.color.md_red_500));
        getWindow().setStatusBarColor(getResources().getColor(R.color.md_red_700));
    }

Hai phương pháp này thay đổi màu thanh điều hướng và trạng thái. Hãy nhớ rằng, nếu bạn đặt mờ thanh điều hướng, bạn không thể thay đổi màu của nó.

Đây phải là mã cuối cùng:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(R.style.MyRandomTheme);
    if (Build.VERSION.SDK_INT >= 21) {
        getWindow().setNavigationBarColor(getResources().getColor(R.color.myrandomcolor1));
        getWindow().setStatusBarColor(getResources().getColor(R.color.myrandomcolor2));
    }
    setContentView(R.layout.activity_main);

}

Bạn có thể sử dụng một công tắc và tạo số ngẫu nhiên để sử dụng các chủ đề ngẫu nhiên, hoặc, như trong ứng dụng danh bạ, mỗi liên hệ có thể có một số xác định trước được liên kết.

Một mẫu chủ đề:

<style name="MyRandomTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/myrandomcolor1</item>
    <item name="colorPrimaryDark">@color/myrandomcolor2</item>
    <item name="android:navigationBarColor">@color/myrandomcolor1</item>
</style>

Xin lỗi vì tiếng Anh của tôi.


1
Cảm ơn bạn vì câu trả lời. Thật không may, yêu cầu của tôi là sử dụng một màu tùy ý . Tất nhiên việc tạo chủ đề cho tất cả các màu là không khả thi.
nhaarman

1
@DanielGomezRico - AFAIK bạn có thể ghi đè chủ đề được đặt sẵn bất kể vị trí ban đầu được đặt ở đâu - miễn là bạn thực hiện đủ sớm. Như câu trả lời cho biết "Bạn có thể áp dụng một chủ đề trước phương thức setContentView bên trong phương thức onCreate."
ToolmakerSteve

50

Bạn có thể sử dụng Theme.applyStyle để sửa đổi chủ đề của mình khi chạy bằng cách áp dụng một kiểu khác cho nó.

Giả sử bạn có các định nghĩa kiểu này:

<style name="DefaultTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/md_lime_500</item>
    <item name="colorPrimaryDark">@color/md_lime_700</item>
    <item name="colorAccent">@color/md_amber_A400</item>
</style>

<style name="OverlayPrimaryColorRed">
    <item name="colorPrimary">@color/md_red_500</item>
    <item name="colorPrimaryDark">@color/md_red_700</item>
</style>

<style name="OverlayPrimaryColorGreen">
    <item name="colorPrimary">@color/md_green_500</item>
    <item name="colorPrimaryDark">@color/md_green_700</item>
</style>

<style name="OverlayPrimaryColorBlue">
    <item name="colorPrimary">@color/md_blue_500</item>
    <item name="colorPrimaryDark">@color/md_blue_700</item>
</style>

Bây giờ bạn có thể vá chủ đề của mình trong thời gian chạy như vậy:

getTheme().applyStyle(R.style.OverlayPrimaryColorGreen, true);

Phương thức applyStylenày phải được gọi trước khi bố trí bị thổi phồng! Vì vậy, trừ khi bạn tải chế độ xem theo cách thủ công, bạn nên áp dụng các kiểu cho chủ đề trước khi gọi setContentViewtrong hoạt động của mình.

Tất nhiên, điều này không thể được sử dụng để chỉ định một màu tùy ý, tức là một trong số 16 triệu (256 3 ) màu. Nhưng nếu bạn viết một chương trình nhỏ tạo ra các định nghĩa kiểu và mã Java cho bạn thì một cái gì đó giống như một trong số 512 (8 3 ).

Điều làm cho điều này thú vị là bạn có thể sử dụng các lớp phủ phong cách khác nhau cho các khía cạnh khác nhau của chủ đề của bạn. Chỉ cần thêm một vài định nghĩa lớp phủ colorAccentchẳng hạn. Bây giờ bạn có thể kết hợp các giá trị khác nhau cho màu chính và màu nhấn gần như tùy ý.

Bạn nên đảm bảo rằng các định nghĩa chủ đề lớp phủ của bạn không vô tình thừa hưởng một loạt các định nghĩa kiểu từ định nghĩa kiểu cha. Ví dụ, một kiểu được gọi là AppTheme.OverlayRedkế thừa hoàn toàn tất cả các kiểu được định nghĩa trong AppThemevà tất cả các định nghĩa này cũng sẽ được áp dụng khi bạn vá chủ đề chính. Vì vậy, hoặc tránh các dấu chấm trong tên chủ đề lớp phủ hoặc sử dụng một cái gì đó giống như Overlay.Redvà xác định Overlaylà một kiểu trống.


11
Hãy thử gọi applyStyletrước khi gọi setContentViewtrong hoạt động của bạn và nó sẽ hoạt động.
devconsole

1
yea okai, sau đó nó có thể làm việc! Tôi đang tìm kiếm một cách để thay đổi màu sắc trong hoạt động không phải là mảnh vỡ! đó là lý do tại sao nó không hoạt động với tôi một cách đáng buồn: <Trường hợp sử dụng của tôi là tôi muốn các màu khác nhau cho FAB hoặc các chỉ báo tab khi chuyển từ các tab sẽ bắt đầu một đoạn khác nhau!
Dennis Anderson

Cảm ơn điều này đã giúp rất nhiều! Tuy nhiên, tôi không thể làm điều đó nhiều lần. (một cho colorPrimary, một cho colorAccent, v.v.). Bạn có thể giúp tôi? Cảm ơn. stackoverflow.com/questions/41779821/ Mạnh
Thomas Vos

1
Đó là loại câu trả lời mà tôi muốn sử dụng tài khoản thứ hai chỉ để +1 một lần nữa. Cảm ơn.
Benoit Duffez

Cảm ơn bạn rất nhiều, đây là những gì tôi đang tìm kiếm .... tôi hy vọng tôi có thể thay đổi màu Accent của chủ đề hiện tại bằng cách sử dụng phương pháp này.
Nasib

32

Tôi đã tạo ra một số giải pháp để tạo bất kỳ chủ đề màu nào, có lẽ điều này có thể hữu ích cho ai đó. API 9+

1. trước tiên hãy tạo " res / value-v9 / " và đặt vào đó tệp này: Styles.xml và thư mục "res / value" thông thường sẽ được sử dụng với các kiểu của bạn.

2. đặt mã này vào res / value / style.xml của bạn:

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">#000</item>
        <item name="colorPrimaryDark">#000</item>
        <item name="colorAccent">#000</item>
        <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
    </style>

    <style name="AppThemeDarkActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">#000</item>
        <item name="colorPrimaryDark">#000</item>
        <item name="colorAccent">#000</item>
        <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
    </style>

    <style name="WindowAnimationTransition">
        <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
        <item name="android:windowExitAnimation">@android:anim/fade_out</item>
    </style>
</resources>

3. vào AndroidQuản lý:

<application android:theme="@style/AppThemeDarkActionBar">

4. tạo một lớp mới với tên "ThemeColors.java"

public class ThemeColors {

    private static final String NAME = "ThemeColors", KEY = "color";

    @ColorInt
    public int color;

    public ThemeColors(Context context) {
        SharedPreferences sharedPreferences = context.getSharedPreferences(NAME, Context.MODE_PRIVATE);
        String stringColor = sharedPreferences.getString(KEY, "004bff");
        color = Color.parseColor("#" + stringColor);

        if (isLightActionBar()) context.setTheme(R.style.AppTheme);
        context.setTheme(context.getResources().getIdentifier("T_" + stringColor, "style", context.getPackageName()));
    }

    public static void setNewThemeColor(Activity activity, int red, int green, int blue) {
        int colorStep = 15;
        red = Math.round(red / colorStep) * colorStep;
        green = Math.round(green / colorStep) * colorStep;
        blue = Math.round(blue / colorStep) * colorStep;

        String stringColor = Integer.toHexString(Color.rgb(red, green, blue)).substring(2);
        SharedPreferences.Editor editor = activity.getSharedPreferences(NAME, Context.MODE_PRIVATE).edit();
        editor.putString(KEY, stringColor);
        editor.apply();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) activity.recreate();
        else {
            Intent i = activity.getPackageManager().getLaunchIntentForPackage(activity.getPackageName());
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            activity.startActivity(i);
        }
    }

    private boolean isLightActionBar() {// Checking if title text color will be black
        int rgb = (Color.red(color) + Color.green(color) + Color.blue(color)) / 3;
        return rgb > 210;
    }
}

5. Tính chính :

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        new ThemeColors(this);
        setContentView(R.layout.activity_main);
    }

    public void buttonClick(View view){
        int red= new Random().nextInt(255);
        int green= new Random().nextInt(255);
        int blue= new Random().nextInt(255);
        ThemeColors.setNewThemeColor(MainActivity.this, red, green, blue);
    }
}

Để thay đổi màu sắc, chỉ cần thay thế Ngẫu nhiên bằng RGB của bạn, Hy vọng điều này sẽ giúp.

nhập mô tả hình ảnh ở đây

Có một ví dụ hoàn chỉnh: ColorTest.zip


bạn có thể chia sẻ dự án như thế nào?
Erselan Khan

Tạo dự án mới, tải xuống tệp - "style.xml" và sử dụng mã ở trên. Chúc may mắn.
IQ.feature

1
Tôi không thể quấn đầu xung quanh, context.setTheme(context.getResources().getIdentifier("T_" + stringColor, "style", context.getPackageName()));bạn có thể cho tôi một lời giải thích hoặc một liên kết để theo dõi chủ đề này không?
Langusten Gustel

1
@ IQ.feature Tôi nghĩ rằng việc đẩy mã của bạn lên repo Github phù hợp hơn để chia sẻ mã
Vadim Kotov

1
Chỉ rõ ràng cho những người khác vì tôi đã yêu thích điều này ... có một tệp res-v9 / Styles.xml khai báo toàn bộ danh sách các chủ đề với các màu khác nhau và về cơ bản mã áp dụng một trong những chủ đề đó và tạo lại hoạt động. Đó là những gì các câu trả lời khác cũng đã cố gắng đạt được .. tức là đó là một cách giải quyết bằng cách xác định trước các chủ đề, nó không phải là các chủ đề tạo lập trình hoặc động.
frezq

3

Tôi đã sử dụng mã của Dahnark nhưng tôi cũng cần thay đổi nền ToolBar:

if (dark_ui) {
    this.setTheme(R.style.Theme_Dark);

    if (Build.VERSION.SDK_INT >= 21) {
        getWindow().setNavigationBarColor(getResources().getColor(R.color.Theme_Dark_primary));
        getWindow().setStatusBarColor(getResources().getColor(R.color.Theme_Dark_primary_dark));
    }
} else {
    this.setTheme(R.style.Theme_Light);
}

setContentView(R.layout.activity_main);

toolbar = (Toolbar) findViewById(R.id.app_bar);

if(dark_ui) {
    toolbar.setBackgroundColor(getResources().getColor(R.color.Theme_Dark_primary));
}

thêm mã này: android: background = "? attr / colorPrimary", vào thanh công cụ của bạn (trong tệp .xml), vì vậy bạn không cần đặt nền trong java.
JavierSegoviaCordoba

Nhưng tôi có hai Thanh công cụ khác nhau, một cho chủ đề sáng, một cho chủ đề tối. Nếu tôi thêm android: background = "? Attr / colorPrimary" Tôi phải sử dụng một số loại bộ chọn.
lgallard

Tôi đã có rất nhiều chủ đề và tôi chỉ sử dụng mã đó. Hãy xem ứng dụng này: play.google.com/store/apps/ từ
JavierSegoviaCordoba

-1

Bạn không thể thay đổi màu của colorPrimary, nhưng bạn có thể thay đổi chủ đề của ứng dụng của mình bằng cách thêm một kiểu mới với một màu khác màu khác

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
</style>

<style name="AppTheme.NewTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorOne</item>
    <item name="colorPrimaryDark">@color/colorOneDark</item>
</style>

và bên trong chủ đề thiết lập hoạt động

 setTheme(R.style.AppTheme_NewTheme);
 setContentView(R.layout.activity_main);

Tôi thấy rằng đã có câu trả lời sớm hơn mô tả các kiểu chuyển đổi. Trong tình huống nào là câu trả lời của bạn phù hợp hơn những câu hỏi? Và để rõ ràng, câu hỏi cho biết "Trong thời gian chạy, người dùng quyết định anh ta muốn sử dụng #ccffff làm màu chính. Tất nhiên không có cách nào tôi có thể tạo chủ đề cho tất cả các màu có thể." Điều này không giải quyết được nhu cầu đó; tuy nhiên nếu không ai mô tả cách làm điều này, thì sẽ hữu ích khi biết.
ToolmakerSteve

-2

từ một hoạt động bạn có thể làm:

getWindow().setStatusBarColor(i color);

2
Thật buồn cười khi câu trả lời này có -8 phiếu nhưng giải quyết vấn đề của tôi: D
Nabin Bhandari

-4

SỬ DỤNG CÔNG CỤ

Bạn có thể tự động thiết lập màu mục thanh công cụ tùy chỉnh bằng cách tạo lớp thanh công cụ tùy chỉnh:

package view;

import android.app.Activity;
import android.content.Context;
import android.graphics.ColorFilter;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.support.v7.internal.view.menu.ActionMenuItemView;
import android.support.v7.widget.ActionMenuView;
import android.support.v7.widget.Toolbar;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomToolbar extends Toolbar{

    public CustomToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        // TODO Auto-generated constructor stub
    }

    public CustomToolbar(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    public CustomToolbar(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        ctxt = context;
    }

    int itemColor;
    Context ctxt;

    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        Log.d("LL", "onLayout");
        super.onLayout(changed, l, t, r, b);
        colorizeToolbar(this, itemColor, (Activity) ctxt);
    } 

    public void setItemColor(int color){
        itemColor = color;
        colorizeToolbar(this, itemColor, (Activity) ctxt);
    }



    /**
     * Use this method to colorize toolbar icons to the desired target color
     * @param toolbarView toolbar view being colored
     * @param toolbarIconsColor the target color of toolbar icons
     * @param activity reference to activity needed to register observers
     */
    public static void colorizeToolbar(Toolbar toolbarView, int toolbarIconsColor, Activity activity) {
        final PorterDuffColorFilter colorFilter
                = new PorterDuffColorFilter(toolbarIconsColor, PorterDuff.Mode.SRC_IN);

        for(int i = 0; i < toolbarView.getChildCount(); i++) {
            final View v = toolbarView.getChildAt(i);

            doColorizing(v, colorFilter, toolbarIconsColor);
        }

      //Step 3: Changing the color of title and subtitle.
        toolbarView.setTitleTextColor(toolbarIconsColor);
        toolbarView.setSubtitleTextColor(toolbarIconsColor);
    }

    public static void doColorizing(View v, final ColorFilter colorFilter, int toolbarIconsColor){
        if(v instanceof ImageButton) {
            ((ImageButton)v).getDrawable().setAlpha(255);
            ((ImageButton)v).getDrawable().setColorFilter(colorFilter);
        }

        if(v instanceof ImageView) {
            ((ImageView)v).getDrawable().setAlpha(255);
            ((ImageView)v).getDrawable().setColorFilter(colorFilter);
        }

        if(v instanceof AutoCompleteTextView) {
            ((AutoCompleteTextView)v).setTextColor(toolbarIconsColor);
        }

        if(v instanceof TextView) {
            ((TextView)v).setTextColor(toolbarIconsColor);
        }

        if(v instanceof EditText) {
            ((EditText)v).setTextColor(toolbarIconsColor);
        }

        if (v instanceof ViewGroup){
            for (int lli =0; lli< ((ViewGroup)v).getChildCount(); lli ++){
                doColorizing(((ViewGroup)v).getChildAt(lli), colorFilter, toolbarIconsColor);
            }
        }

        if(v instanceof ActionMenuView) {
            for(int j = 0; j < ((ActionMenuView)v).getChildCount(); j++) {

                //Step 2: Changing the color of any ActionMenuViews - icons that
                //are not back button, nor text, nor overflow menu icon.
                final View innerView = ((ActionMenuView)v).getChildAt(j);

                if(innerView instanceof ActionMenuItemView) {
                    int drawablesCount = ((ActionMenuItemView)innerView).getCompoundDrawables().length;
                    for(int k = 0; k < drawablesCount; k++) {
                        if(((ActionMenuItemView)innerView).getCompoundDrawables()[k] != null) {
                            final int finalK = k;

                            //Important to set the color filter in seperate thread, 
                            //by adding it to the message queue
                            //Won't work otherwise. 
                            //Works fine for my case but needs more testing

                            ((ActionMenuItemView) innerView).getCompoundDrawables()[finalK].setColorFilter(colorFilter);

//                              innerView.post(new Runnable() {
//                                  @Override
//                                  public void run() {
//                                      ((ActionMenuItemView) innerView).getCompoundDrawables()[finalK].setColorFilter(colorFilter);
//                                  }
//                              });
                        }
                    }
                }
            }
        }
    }



}

sau đó tham khảo nó trong tập tin bố trí của bạn. Bây giờ bạn có thể đặt màu tùy chỉnh bằng cách sử dụng

toolbar.setItemColor(Color.Red);

Nguồn:

Tôi đã tìm thấy thông tin để thực hiện việc này tại đây: Cách thay đổi màu sắc biểu tượng Thanh công cụ Android

và sau đó tôi đã chỉnh sửa nó, cải thiện nó và đăng nó ở đây: GitHub: AndroidDocateToolbarItemColor


Điều này không trả lời câu hỏi. Đặc biệt là phần "Mục tiêu của tôi cuối cùng là có ActionBar và tất cả các vật dụng như CheckBox để sử dụng màu chính này. ".
nhaarman

Sau đó chỉ cần thêm vào để bao gồm một hộp kiểm. Ví dụ: thêm if (v dụof CheckBox) {themeChexnoxWithColor (thanh công cụIconsColor); Tôi không thấy cách này không trả lời trung thực câu hỏi của bạn
Michael Kern

@nhaarman bạn có thể tự động đặt màu của thanh hành động như stackoverflow.com/questions/23708637/change-actionbar-background-color-dynamally Tôi chỉ không hiểu chính xác câu hỏi của bạn
Michael Kern

Tôi có một ứng dụng mà người dùng có thể chọn màu của thanh hành động và màu của thanh hành động. Tôi không thấy những gì bạn cần
Michael Kern

2
Điều này rất hữu ích với tôi.
Đom đóm

-6

Đây là những gì bạn CÓ THỂ làm:

ghi một tập tin vào thư mục drawable, hãy đặt tên cho nó là background.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="?attr/colorPrimary"/>
</shape>

sau đó đặt Bố cục của bạn (hoặc trường hợp như vậy) android:background="@drawable/background"

khi thiết lập chủ đề của bạn, màu này sẽ giống như vậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.