标签: android-styles

如何更改textView android.R.layout.simple_spinner_dropdown_item的颜色?

我正在使用内置资源ID android.R.layout.simple_spinner_dropdown_item创建一个SpinnerAdapter

SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item);
Run Code Online (Sandbox Code Playgroud)

但资源ID创建的textView有textColor Black,我需要不同的颜色.改变颜色但保持其他一切的最佳方法是什么?

当我尝试在xml文件中创建自己的textView布局资源时,例如

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/White"
    />
Run Code Online (Sandbox Code Playgroud)

然后它的行为与android.R.layout.simple_spinner_dropdown_item的行为不同,因为例如填充不同.所以

  1. 有没有办法在xml文件中创建自己的布局资源,该文件继承了android.R.layout.simple_spinner_dropdown_item中的所有内容,并允许我覆盖textColor?
  2. 或者是某个地方可以找到android.R.layout.simple_spinner_dropdown_item的完整定义?
  3. 或者或许有一种更简单的方式?

这个问题涉及我今天提出的另一个问题(无法使用Android Action Bar下拉导航更改文本颜色).我已经意识到这个问题的一个答案(也就是这个问题)是创建我自己的ArrayAdapter继承的类,ArrayAdapter<T>这样我每次使用ArrayAdapter时都可以在代码中设置颜色(参见我对这个问题的回答).但这似乎是一个非常麻烦的解决方案: - |.

改变文字颜色应该不是一项艰巨的任务!

android textview android-spinner android-styles

6
推荐指数
2
解决办法
1万
查看次数

设置以编程方式添加的视图的样式

在我的代码中,我以编程方式向我的Layout添加了radioButtons,checkboxes等输入元素.问题是,这些元素的样式不是你可以获得的默认样式,当你通过xml添加let说一个radioButton时.(它在白色应用程序背景上看起来非常白,几乎透明.有点像它是透明的)另外,我添加的EditText元素具有相同的样式,如果你在其中键入内容,文本太大了重叠文本行.所以我猜这一切都归结为以某种方式给这些元素提供了默认样式,就像它们通过xml定义时一样.

我的代码示例如下所示:

RadioGroup radioGroup = new RadioGroup(mContext);
    radioGroup.setLayoutParams(fullWidthWrapHeight);

    for (int i = 0; i < arg0.getOptions().size(); i++){
        RadioButton radioButton = new RadioButton(mContext, null);
        radioButton.setPadding(padding16dp , padding8dp, padding16dp, padding8dp);
        radioButton.setText(arg0.getOptions().get(i).getText());
        radioButton.setLayoutParams(wrapBoth);
        radioButton.setGravity(Gravity.CENTER_HORIZONTAL);

        radioButton.setTextAppearance(mContext, R.style.Default_Text);
        radioGroup.addView(radioButton);
    }
Run Code Online (Sandbox Code Playgroud)

我的目标API lvl是21(Lollipop)

android android-styles programmatically-created

6
推荐指数
1
解决办法
5926
查看次数

给定样式时,操作栏标题消失

我一直在为我的Actionbar添加样式,并且每个方面都运行良好,直到我尝试更改Actionbar标题.当我为Actionbar的标题添加样式时,标题就会消失.Actionbar仍在那里,但根本没有标题.

这是我的Actionbar样式代码

<style name="Theme.TabTheme" parent="Theme.AppCompat">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/dark_primary</item>
    <item name="colorAccent">@color/accent</item>
    <item name="android:windowNoTitle">false</item>
    <item name="android:windowActionBar">true</item>
    <item name="android:actionBarStyle">@style/Theme.TabTheme.MyActionBar</item>
    <item name="android:actionBarTabStyle">@style/MyActionBarTabs</item>
</style>

<style name="Theme.TabTheme.MyActionBar" parent="ThemeOverlay.AppCompat.ActionBar">
    <item name="android:background">@color/primary</item>
    <item name="android:height">50dp</item>
    <item name="android:titleTextStyle">
        @style/Theme.TabTheme.MyActionBar.TitleTextStyle
    </item>
</style>

<style name="Theme.TabTheme.MyActionBar.TitleTextStyle"
       parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@color/primary_text</item>
    <item name="android:text">@string/app_name</item>
    <item name="android:textSize">15sp</item>
</style>

<!-- ActionBar tabs styles -->
<style name="MyActionBarTabs" parent="Theme.AppCompat">
    <!-- tab indicator -->
    <item name="android:background">@drawable/actionbar_tab_indicator</item>
</style>
Run Code Online (Sandbox Code Playgroud)

为什么在Actionbar Title中添加样式会使标题消失?

android android-styles

6
推荐指数
1
解决办法
880
查看次数

在XML中设置SearchView宽度和提示颜色

我已将SearchView功能添加到工具栏中,我希望在展开时将其设置为全宽,并将提示文本颜色更改为白色而不是黑色.最后,我已经能够以编程方式执行此操作:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);

    // Associate searchable configuration with the SearchView
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setMaxWidth(4000);
    ((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text)).setHintTextColor(getResources().getColor(R.color.md_text_white));
    searchView.setIconifiedByDefault(false);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法通过xml或其他配置中的样式来实现这一点?我更喜欢独立的功能和样式.

我已尝试使用searchViewStyle并为SearchView创建自定义样式但尚未使用:

<style name="AppTheme" parent="Base.AppTheme">
    <item name="searchViewStyle">@style/SearchViewTheme</item>
</style>
<style name="SearchViewTheme" parent="Widget.AppCompat.Light.SearchView">
    <item name="android:maxWidth">10000dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)

这是我的menu_main.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">

    <item
        android:id="@+id/action_search"
        android:title="@string/action_search"
        android:orderInCategory="100"
        android:icon="@drawable/ic_action_search"
        app:showAsAction="collapseActionView|ifRoom"
        app:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>
Run Code Online (Sandbox Code Playgroud)

android searchview android-styles

6
推荐指数
1
解决办法
7405
查看次数

以编程方式创建CardView不能正确应用样式

我正在尝试创建一个CardView代码.但是,它似乎没有正确应用样式.以下是款式:

<style name="CardViewStyle" parent="CardView">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_margin">8dp</item>
</style>

<style name="Widget.CardContent" parent="android:Widget">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:paddingLeft">16dp</item>
    <item name="android:paddingRight">16dp</item>
    <item name="android:paddingTop">24dp</item>
    <item name="android:paddingBottom">24dp</item>
    <item name="android:orientation">vertical</item>
</style>
Run Code Online (Sandbox Code Playgroud)

在XML中,它看起来像这样:

<android.support.v7.widget.CardView
style="@style/CardViewStyle">
    <LinearLayout
        style="@style/Widget.CardContent">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Title"
            android:textAppearance="@style/TextAppearance.AppCompat.Title" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Caption"/>
    </LinearLayout>
</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试在Java中完全相同:

CardView card = new CardView(new ContextThemeWrapper(MyActivity.this, R.style.CardViewStyle), null, 0);
LinearLayout cardInner = new LinearLayout(new ContextThemeWrapper(MyActivity.this, R.style.Widget_CardContent));

TextView tv_title = new TextView(this);
tv_title.setLayoutParams(new LinearLayout.LayoutParams(
       LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT
));
tv_title.setTextAppearance(this, R.style.TextAppearance_AppCompat_Title);
tv_title.setText("Name");

TextView tv_caption …
Run Code Online (Sandbox Code Playgroud)

android android-styles android-cardview

6
推荐指数
1
解决办法
1万
查看次数

理解主题和样式属性之间的区别

我正在处理Android L颜色定义以定义ListView的行.我有一个主题:

    <item name="colorAccent">@color/color_blue_dark</item>
Run Code Online (Sandbox Code Playgroud)

在我的行中我定义了另一个:

<style name="DefaultRow">
    <item name="colorAccent">@color/color_sand</item>
    <item name="android:background">?android:attr/activatedBackgroundIndicator</item>
</style>
Run Code Online (Sandbox Code Playgroud)

假设colorAccent值将被覆盖.但如果我在我的行中,那就不行了:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
          ...
          style="@style/DefaultRow"/>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但如果我这样做,它会起作用:

 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
              ...
              android:theme="@style/DefaultRow"/>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有什么不同?是colorAccent在应用主题时定义的,而不是在以后重写?如何解决这个问题具有逆向兼容性?

android android-theme android-styles

6
推荐指数
1
解决办法
1469
查看次数

android - 材质按钮颜色

我正在设计我的应用程序并想要设置按钮背景颜色并保持它们像材料一样.

我想要

设置按钮背景颜色

我做

1.

我为按钮创建样式,设置colorPrimary和设置按钮样式和colorButtonNormal.它有效.

style name="AppTheme.Button" parent="Widget.AppCompat.Button.Colored">
    <item name="android:textColor">@android:color/white</item>
    <item name="colorButtonNormal">@color/colorAccent</item>
</style>

...

<item name="android:buttonStyle">@style/AppTheme.Button</item>
<item name="colorButtonNormal">@color/colorAccent</item>
Run Code Online (Sandbox Code Playgroud)

2.

但我想做一个不同颜色的按钮.我尝试使用backgroundTint,但它不起作用.所以我创造风格:

 <style name="AppTheme.Button.Wildberries" parent="Widget.AppCompat.Button.Colored">
    <item name="colorButtonNormal">@color/wildberries</item>
</style>
Run Code Online (Sandbox Code Playgroud)

它适用于Android 4.x,但在Android 5.x按钮仍然是colorAccent.

3.

我为按钮创建了style-v21:

 <style name="AppTheme.Button.Wildberries" parent="@android:style/Widget.Material.Button">
    <item name="android:backgroundTint">@color/wildberries</item>
</style>
Run Code Online (Sandbox Code Playgroud)

适用于Android Studio:

IDE

适用于Android 4.x

但不适用于5.x.

在此输入图像描述

4.

我也尝试使用AppCompat.Button:

 <android.support.v7.widget.AppCompatButton
            xmlns:app="http://schemas.android.com/apk/res-auto"
            app:backgroundTint="@color/wildberries"

            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="??????? ?? ????"
            android:id="@+id/WildBtn"
            android:textSize="14dp"
            android:textColor="@android:color/white"
            android:theme="@style/AppTheme.Button.Wildberries"
            android:stateListAnimator="@null" />
Run Code Online (Sandbox Code Playgroud)

一无所获:

在此输入图像描述

在Android 4.x设备按钮仍为紫色,5.x仍为绿色.

那么,在android 4.x和hihger上设置按钮背景颜色的方法是什么?

android android-appcompat android-styles material-design

6
推荐指数
1
解决办法
8969
查看次数

样式不适用于自定义复选框和单选按钮

我正在开发自定义复选框和单选按钮,但样式不适用于前棒棒糖设备(显示黑色代替).我这样编码:

XML:

<com.kaho.myapp.CustomCheckBox
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="CheckBoxText"
  android:textColor="@color/colorPrimary"
  android:theme="@style/SampleTheme"/>
Run Code Online (Sandbox Code Playgroud)

自定义复选框:

public class CustomCheckBox extends CheckBox {
    public CustomCheckBox(Context context) {
        super(context);
    }

    public CustomCheckBox(Context context, AttributeSet attrs) {
        super(context, attrs);
        setFont(context, attrs) ;
    }

    public CustomCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setFont(context,attrs) ;
    }

    public CustomCheckBox(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        setFont(context, attrs) ;
    }

    private void setFont(Context context, AttributeSet attrs) {
        if (attrs != null) {
            /* Set the …
Run Code Online (Sandbox Code Playgroud)

android android-theme android-styles

6
推荐指数
1
解决办法
553
查看次数

无法让Android DatePickerDialog切换到Spinner模式

我正在构建一个使用DatePickerDialog的应用程序,允许用户选择他们的生日.这是现在加载对话框的代码:

private void selectBirthdate() {
    int year, month, day;
    if (mBirthDate == null) {
        year = DEF_YEAR;
        month = DEF_MON;
        day = DEF_DAY;
    }
    else {
        year = mBirthDate.get(Calendar.YEAR);
        month = mBirthDate.get(Calendar.MONTH);
        day = mBirthDate.get(Calendar.DAY_OF_MONTH);
    }
    new DatePickerDialog(
            getActivity(),
            new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                    mBirthDate = new GregorianCalendar();
                    mBirthDate.set(Calendar.YEAR, year);
                    mBirthDate.set(Calendar.MONTH, month);
                    mBirthDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                    if (mTxtBirthDate != null) {
                        mTxtBirthDate.setText(mBirthDateFormat.format(mBirthDate.getTime()));
                    }
                }
            },
            year,
            month,
            day
    ).show();
}
Run Code Online (Sandbox Code Playgroud)

这是我加载对话框时的样子: 原始对话

但是,他们希望能够使用旧式微调器DatePicker,因为在新的日历视图中,用户并不总是可以更改年份.所以我一直在研究这个主题,根据我读过的内容,应该可以使用主题强制DatePickerDialog进入Spinner模式.所以这就是我所做的. …

android android-datepicker android-alertdialog android-styles

6
推荐指数
2
解决办法
3833
查看次数

Custom attribute not resolved inside styles and theme

I have android application with custom themes which was developed 2-3 year ago. I had this stylable in my attr.xml resouce file:

<declare-styleable name="EVETextViewPlus">
    <attr name="customFont" format="string" />
    <attr name="pageStripFont" format="string" />
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)

And I've used this inside my style_warm.xml resource file:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
    <style name="style_display_page_title_warm">
        <item name="my.app.package.:pageStripFont">fonts/b_titr.ttf</item>
        <item name="android:textSize">25dp</item>
        <item name="android:textColor">@color/colorDisplayPageTitle</item>
    </style>
....
Run Code Online (Sandbox Code Playgroud)

When I'm going to sign my app, it checks for errors and prompts:

Cannot resolve symbol 'my.app.package:pageStripFont'

I should mention my.app.package is package …

android gradle android-theme android-styles android-attributes

6
推荐指数
1
解决办法
128
查看次数