标签: android-styles

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

datepicker的风格与活动不同

我有自定义样式的活动,我希望我的活动有一个自定义标题栏,所以我创建了以下样式:

<style name="costum_titlebar">
    <item name="android:background">@color/titlebar_background</item>
</style>

<style name="CustomTheme" parent="android:Theme">
    <item name="android:windowTitleSize">@dimen/titlebar_size</item>
    <item name="android:windowTitleBackgroundStyle">@style/costum_titlebar</item>
</style>
Run Code Online (Sandbox Code Playgroud)

在清单中我使用:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/CustomTheme" >
Run Code Online (Sandbox Code Playgroud)

在我使用的活动中:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
this.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.setting_activity_titlebar);
Run Code Online (Sandbox Code Playgroud)

到目前为止它很好并且工作正常,我有自定义标题栏的活动.
现在我想使用datePickerDialog.问题是对话框看起来很旧:

在此输入图像描述

但我希望它看起来像这样:

在此输入图像描述

我也有这种风格:

<style name="AppBaseTheme" parent="android:Theme.Light">
Run Code Online (Sandbox Code Playgroud)

所以我用它来创建DatePickerDialog,如下所示:

new DatePickerDialog(getActivity(),R.style.AppBaseTheme, this, year, month, day);
Run Code Online (Sandbox Code Playgroud)

但主题不适用.

只是为了测试,我创建了一个默认样式的第二个应用程序,只有一个按钮来打开日期选择器,所以datepicker看起来像我想要的.两个应用都有android:minSdkVersion="8"

我认为问题出在自定义标题栏上,那么我如何才能获得所需风格的自定义标题栏和日期选择器呢?

编辑:

我改变android:minSdkVersion="11"

<style name="datePickerTheme" parent="@android:style/Widget.Holo.DatePicker"></style>

new DatePickerDialog(getActivity(),R.style.datePickerTheme, this, year, month, day);

但结果仍然是一样的.

android android-datepicker android-theme android-styles

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

以编程方式获取为活动应用的主题值

我想知道应用程序中的Activity应用了哪个主题.

通常我们通过使用来设置主题

setTheme(android.R.style.Theme_Light);
Run Code Online (Sandbox Code Playgroud)

这里我们指定样式,因此我们可以通过编程方式获得为活动准确应用的特定样式类型.

谢谢

android android-theme android-activity android-styles

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

SetError在TextInputLayout中生成具有自定义样式的异常

我使用自定义样式在TextInputLayout中使用Edittext,以便我可以更改提示颜色.如果我在不设置样式的情况下使用EditText,则该setError方法可以正常工作,但是在我的样式集中,抛出了下一个异常:

java.lang.UnsupportedOperationException: Failed to resolve attribute at index 24: TypedValue{t=0x3/d=0x2b5 "res/color/secondary_text_material_dark.xml" a=1 r=0x1060166}
                                                                             at android.content.res.TypedArray.getColor(TypedArray.java:447)
                                                                             at android.widget.TextView.<init>(TextView.java:745)
                                                                             at android.widget.TextView.<init>(TextView.java:678)
                                                                             at android.widget.TextView.<init>(TextView.java:674)
                                                                             at android.widget.TextView.<init>(TextView.java:670)
                                                                             at android.support.design.widget.TextInputLayout.setErrorEnabled(TextInputLayout.java:380)
                                                                             at android.support.design.widget.TextInputLayout.setError(TextInputLayout.java:425)
                                                                             at com.wallakoala.wallakoala.Activities.SignUpUI.validateEmail(SignUpUI.java:50)
                                                                             at com.wallakoala.wallakoala.Activities.SignUpUI.access$100(SignUpUI.java:21)
                                                                             at com.wallakoala.wallakoala.Activities.SignUpUI$MyTextWatcher.afterTextChanged(SignUpUI.java:103)
                                                                             at android.widget.TextView.sendAfterTextChanged(TextView.java:8017)
                                                                             at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:10182)
                                                                             at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1043)
                                                                             at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:560)
                                                                             at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:492)
                                                                             at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:34)
                                                                             at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:685)
                                                                             at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:445)
                                                                             at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:340)
                                                                             at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:78)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                             at android.os.Looper.loop(Looper.java:224)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5526)
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Run Code Online (Sandbox Code Playgroud)

这是EditText的XML

<android.support.design.widget.TextInputLayout
        android:id="@+id/email_input_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginRight="34dp"
        android:layout_marginLeft="34dp"
        android:layout_marginTop="12dp"
        android:theme="@style/TextLabel">

        <EditText
            android:id="@+id/email_edittext"
            android:inputType="textEmailAddress" …
Run Code Online (Sandbox Code Playgroud)

android android-edittext android-styles android-textinputlayout

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

以编程方式设置TextInputLayout的样式

有没有一种方法可以通过编程方式自定义这些TextInputLayout属性:

  • textColorHint
  • colorAccent
  • colorControlNormal
  • colorControlActivated
  • textSelectHandle

我知道如何使用主题属性设置样式,但是我正在研究的项目会动态加载颜色信息,据我所知,无法在运行时更改主题/样式值。

android android-theme android-styles android-textinputlayout

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

来自应用程序主题的样式工具栏

关于 Android 主题和样式的问题和文章数以百万计——我已经阅读了其中的一半,但我仍然会发疯

我想要的 - 并且来自具有可爱,友好的旧 CSS 样式表的 Web 应用程序开发背景,我认为这很容易 - 就是为我的应用程序创建一个主题,并在该主题中指定我的工具栏的颜色(我是为每个活动指定它们,我认为这是阅读官方文档后正确的做法)。

所以,在我的styles.xml文件中,我有:

<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:toolbarStyle">@style/MyToolbar</item>
</style>

<style name="MyToolbar" parent="Base.Widget.AppCompat.Toolbar">
    <item name="android:textColor">#ffffff</item>
    <item name="android:textColorPrimary">#ffffff</item>
    <item name="android:elevation">4dp</item>
    <item name="android:background">@color/colorPrimary</item>
</style>
Run Code Online (Sandbox Code Playgroud)

在我看来,我在这里为我的工具栏创建了一个样式,然后在我的主题中引用了该样式。然后我将我的主题设置为应用程序主题AndroidManifest.xml

android:theme="@style/MyTheme"
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,这是有效的。我的主题中引用了其他样式,为了简单起见,我从代码中省略了这些样式,它们可以正常工作 - 我的按钮、文本视图等按照我创建的样式设置样式。

但讨厌的工具栏不是。我试过直接在工具栏 xml 中引用我的样式(即使我不明白为什么我需要在主题中指定它):

<android.support.v7.widget.Toolbar
    android:id="@+id/main_activity_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    style="@style/MyToolbar">
</android.support.v7.widget.Toolbar>
Run Code Online (Sandbox Code Playgroud)

令人沮丧的是,这确实导致工具栏的背景颜色与我想要的一样,但文本仍然是黑色的,即使我试图将其设置为白色。

我是否误解了主题引用样式然后应用于活动或整个应用程序的方式?工具栏有什么独特之处吗?我花了更长的时间来尝试解决这个问题,而不是从头开始编写整个应用程序的其余部分,这是我的第一个 Android 应用程序!

更新: 好的,所以我已经确定,虽然我的工具栏的背景颜色需要在应用于工具栏的样式中设置,以防止该背景颜色传播到所有子视图,但需要在主题中指定所需的文本颜色因为工具栏中显示的文本是子视图(即使我在活动的 xml 中看不到它)。所以,这有效:

样式.xml:

<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item …
Run Code Online (Sandbox Code Playgroud)

android android-theme android-styles

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

当包含 textColor 的样式应用于 textView 的 textAppearance 时,文本的颜色不会改变

我想减少我的 xml 代码重复。所以我为 textView 中的文本做了一些标准样式。我们可以在 textView 中的 'style' 属性以及 'android:textAppearance' 属性下应用样式。

以下是我为文本外观制作的一些样式-

<style name="Grey">
    <item name="android:textColor"> #333333 </item>
</style>

<style name="CodeFont" parent="@android:style/TextAppearance.Medium">
    <item name="android:textColor"> #00FF00 </item>
    <item name="android:typeface">monospace</item>
    <item name="android:textSize">20sp</item>
</style>
Run Code Online (Sandbox Code Playgroud)

当我在 'textAppearance' 属性下应用这些样式时,文本颜色在上述任何样式中都没有改变。它在 textView 的“style”属性下工作。

//textColor not working
<TextView
    android:id="@+id/profile_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Full Name"
    android:textAppearance="@style/CodeFont"/>

//textColor working
<TextView
    android:id="@+id/profile_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Full Name"
    style="@style/CodeFont"/>
Run Code Online (Sandbox Code Playgroud)

我希望它们在“textAppearance”属性下工作,以便我可以在“style”属性下应用一些其他样式。根据android 文档,我们可以在 'textAppearance' 属性下应用 textColor 样式。

请对此提出一些解决方案。谢谢

android text appearance textcolor android-styles

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

如何以编程方式获取 ?attr/ 值

我正在尝试做一些自定义视图样式,但在从主题中正确选择样式属性时遇到了问题。

例如,我想获得主题 EditText 的文本颜色。

查看主题堆栈,您可以看到我的主题使用它来设置它的 EditText 样式:

<style name="Base.V7.Widget.AppCompat.EditText" parent="android:Widget.EditText">
    <item name="android:background">?attr/editTextBackground</item>
    <item name="android:textColor">?attr/editTextColor</item>
    <item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是我如何得到那个? attr/editTextColor

(又名,主题分配给“android:editTextColor”的值)

通过谷歌搜索,我找到了足够的答案:

TypedArray a = mView.getContext().getTheme().obtainStyledAttributes(R.style.editTextStyle, new int[] {R.attr.editTextColor});
int color = a.getResourceId(0, 0);
a.recycle();
Run Code Online (Sandbox Code Playgroud)

但我很确定我一定是做错了,因为它总是显示为黑色而不是灰色?

android android-styles

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

为什么 backgroundTint 需要 android: 前缀在 API 21 之后而不是之前?

声明一个样式,当我定义一个 item 时android:backgroundTint,我收到一个警告,它从 API 21 开始可用,而我指定的最小 API 较低(API 17)。另一方面,当我用 simple 替换它时backgroundTint,警告消失了。有谁知道这是为什么?

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:backgroundTint">#0F0</item>
</style>
Run Code Online (Sandbox Code Playgroud)

除此之外,如果我android:backgroundTint用于单个组件,例如按钮,则无论我的项目的最低 SDK 是什么,我都不会收到警告或错误。这有点令人费解。

android xml-namespaces android-styles

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

样式化SeekBarPreference与SwitchPreference一致

我有以下偏好preferences.xml:

<SwitchPreference
    android:summary="Lorum ipsum dolor sit amet"
    android:title="Frobulate" />
<SeekBarPreference android:title="Marglins"/>
<SwitchPreference android:title="Bromzuling" />
Run Code Online (Sandbox Code Playgroud)

这个问题是,这呈现Marglins出一种非常不同的风格作为SwitchPreferences 的标题:

1]

有什么东西我可以放在我styles.xml的标题看起来相同的字体大小,颜色,对齐等?

android android-preferences android-styles

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