我正试图在Android中设置我的应用主题.但是,每个小部件本身都是一个令人痛苦的痛苦:我必须搜索主题特定小部件,然后创建一个样式,希望从小部件使用的相同样式派生.
当然,关于主题特定小部件的答案并不总是包含有关基本样式的信息,只包含特定颜色.
所以,不是接受鱼吃,你能教我钓鱼吗?
如何ObtainStyledAttributes()在窗口小部件构造函数中解释这些调用并从中提取样式?我该怎么说呢?
特别是,你能告诉我AlertDialog按钮颜色吗?什么样式定义棒棒糖扁平按钮+青色文字颜色?如果从AlertDialog源和ObtainStyledAttributes调用开始,我该如何获得该样式?
所以我试图改变我的DatePicker标题的颜色.尽管如此,它似乎并不那么容易.你可以在XML中这样做:
android:headerBackground="@color/myColor" />
Run Code Online (Sandbox Code Playgroud)
但是,似乎没有办法在代码中执行此操作.通常的制定者似乎并不明显(即datePicker.setHeaderBackground).
有任何想法吗?
一般来说,为了改变任何UI元素的外观,您是如何找到要覆盖的主题属性的?
目前,我依赖于遍历框架源文件:values.xml中的主题定义(通常是支持库变体),attrs.xml中的属性定义以及R.styleable类文档.
但这完全是命中注定.这不仅耗费时间,而且有时我会完全错过,例如我一直在努力寻找如何在DatePickerDialog的OK和Cancel按钮中更改文本样式.您可以随意使用它作为示例,但如果您这样做,请概述您的发现过程.我正在寻找的答案是如何发现任何UI元素的应用样式,
还是没有确定的方法可以找到答案?你只需要知道吗?
我是 android 编程新手,我想DatePicker在我的布局中使用 element 。我能够成功使用它,但我不知道如何更改其选定的日期颜色。我在这个网站上读过很多帖子,他们谈论了改变DatePickerDialog. 我尝试对DatePicker元素遵循类似的方法,但无法做到。我可以更改日期的textColorusingcalendarTextColor属性。我的布局文件代码如下:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<DatePicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/datePicker"
android:datePickerMode="calendar"
android:spinnersShown="false"
android:layout_gravity="center"
android:layout_marginTop="-52dp"
android:layout_marginBottom="-20dp"
style="@style/MyDatePickerStyleTheme"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这是相应的 styles.xml 代码:
<style name="MyDatePickerStyleTheme" parent="@android:style/Theme.Holo.Light.Dialog">
<item name="colorAccent"> #00ff00 </item>
<item name="android:datePickerStyle">@style/MyDatePickerStyle</item>
<item name="android:colorPrimary"> #00ff00 </item>
<item name="android:colorPrimaryDark"> #00ff00 </item>
<item name="android:colorAccent"> #00ff00 </item>
<item name="android:backgroundTint"> #00ff00 </item>
<!-- <item name="android:calendarTextColor"> #00ff00 </item> -->
</style>
<style name="MyDatePickerStyle">
<item name="android:calendarTextColor"> #00ff00 </item>
</style>
Run Code Online (Sandbox Code Playgroud)
我想补充一些额外的观点:
android:calendarTextColor如果我把它放在里面,属性就可以工作MyDatePickerStyleTheme,但是当我把它放在里面时,属性就不起作用MydatePickerStyle …我使用Android Studio中的默认模板使用CoordinatorLayout.
但是,当我向下滚动时,通知栏(状态栏)将滚出屏幕.这个效果可以在这个视频中看到. https://youtu.be/1oAqEpg7N4I
我已经包含了相关部分,但其余代码可以在这里找到:https: //github.com/vidia/MaterialDiningCourts/blob/master/app/src/main/res/layout/activity_meal_view.xml
在演示(cheesesquare)中,行为是我所期望的,将通知栏留在原位并且工具栏在其下方滚动.我已经搜索了这些布局并对我的代码进行了更改以匹配它们,但是无法找到必要的更改.
是什么导致通知栏滚动页面,为什么Android Studio中的示例有这种不正确的行为?
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MealViewActivity">
<android.support.v4.view.ViewPager
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|snap"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<Spinner
android:id="@+id/meal_chooser_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</android.support.v7.widget.Toolbar>
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTabLayout"
android:foregroundGravity="top"
app:tabIndicatorColor="@color/tabSelectedIndicatorColor"/>
</android.support.design.widget.AppBarLayout>
Run Code Online (Sandbox Code Playgroud)
和styles.xml,虽然我已经从这个文件中删除了我的自定义主题,但它没有帮助解决这个问题.
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item> …Run Code Online (Sandbox Code Playgroud) 我试图DatePicker在另一个活动的顶部显示一个对话框,正在发生的是它以某种方式继承了它的颜色。
我希望它具有绿色的标头和白色的背景,

这是样式的节选
<style name="DatePickerDialog" parent="@android:style/Theme.Holo.Light">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="colorAccent">@color/primary</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这段代码用来弹出 DatePicker
DatePickerDialog datepicker = new DatePickerDialog(this, R.style.DatePickerDialog, new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
TextView newdate = (TextView) findViewById(R.id.newdate);
Date date = getDate(year, monthOfYear, dayOfMonth);
DateFormat dateformat = new SimpleDateFormat(getResources().getString(R.string.date_format_full));
newdate.setText(dateformat.format(date));
}
}, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
datepicker.show();
Run Code Online (Sandbox Code Playgroud)

如果我在样式中指定白色背景, 
<item name="android:background">@color/app_background</item>
Run Code Online (Sandbox Code Playgroud)
我尝试过的最后一件事是AlertDialog.THEME_DEVICE_DEFAULT_DARK用作DatePicker主题
DatePickerDialog datepicker = new DatePickerDialog(this,
AlertDialog.THEME_DEVICE_DEFAULT_DARK, new
DatePickerDialog.OnDateSetListener()
Run Code Online (Sandbox Code Playgroud)

这是我从中打开对话框的活动的样式
<style …Run Code Online (Sandbox Code Playgroud) 如您所知,我正在使用日期选择器(不同的语言。顶部写于2015年11月)。
我使用的是OnClickListener,当a1单击EditText 时,将弹出DatePicker对话框,您将能够选择日期,完成后您会在EditText中收到日期。
但是我在对话框的确认按钮和选择年份方面遇到了麻烦,它们是不可见的,尽管看不到它们,但我只能单击它们。
如何启用/查看构型和年份日期选择按钮?
Activity.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_first_entry"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.none.myapplication.firstEntry">
<EditText
android:id="@+id/a1"
android:layout_below="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
Activity.java
private EditText a1;
private DatePickerDialog fromDatePickerDialog;
private SimpleDateFormat dateFormatter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first_entry);
dateFormatter = new SimpleDateFormat("dd-MM-yyyy");
findViewsById();
setDateTimeField();
}
private void findViewsById() {
a1 = (EditText) findViewById(R.id.a1);
a1.setInputType(InputType.TYPE_NULL);
a1.requestFocus();
}
private void setDateTimeField() {
a1.setOnClickListener(this);
Calendar newCalendar = Calendar.getInstance();
fromDatePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() …Run Code Online (Sandbox Code Playgroud)