应用日志调试窗口第一工具栏调试完成。

This commit is contained in:
2025-12-15 16:41:42 +08:00
parent 656e58ec5c
commit f83e62b05d
10 changed files with 395 additions and 55 deletions

View File

@@ -33,7 +33,7 @@ android {
// versionName 更新后需要手动设置
// .winboll/winbollBuildProps.properties 文件的 stageCount=0
// Gradle编译环境下合起来的 versionName 就是 "${versionName}.0"
versionName "15.12"
versionName "15.14"
if(true) {
versionName = genVersionName("${versionName}")
}

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Mon Dec 15 03:47:52 GMT 2025
stageCount=3
#Mon Dec 15 08:40:28 GMT 2025
stageCount=0
libraryProject=libappbase
baseVersion=15.12
publishVersion=15.12.2
buildCount=40
baseBetaVersion=15.12.3
baseVersion=15.14
publishVersion=15.14.0
buildCount=105
baseBetaVersion=15.14.1

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Mon Dec 15 03:47:52 GMT 2025
stageCount=3
#Mon Dec 15 08:40:28 GMT 2025
stageCount=0
libraryProject=libappbase
baseVersion=15.12
publishVersion=15.12.2
buildCount=40
baseBetaVersion=15.12.3
baseVersion=15.14
publishVersion=15.14.0
buildCount=105
baseBetaVersion=15.14.1

View File

@@ -24,11 +24,11 @@ import android.widget.EditText;
import android.widget.HorizontalScrollView;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.Spinner;
import android.widget.TextView;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.R;
import cc.winboll.studio.libappbase.views.HorizontalListView;
import cc.winboll.studio.libappbase.widget.LogTagSpinner;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
@@ -52,7 +52,7 @@ public class LogView extends RelativeLayout {
TAGListAdapter mTAGListAdapter;
LogViewThread mLogViewThread;
LogViewHandler mLogViewHandler;
Spinner mLogLevelSpinner;
LogTagSpinner mLogLevelSpinner;
ArrayAdapter<CharSequence> mLogLevelSpinnerAdapter;
// 标签列表
HorizontalListView mListViewTags;
@@ -115,7 +115,7 @@ public class LogView extends RelativeLayout {
metTagSearch = findViewById(cc.winboll.studio.libappbase.R.id.tagsearch_et);
// 获取Log Level spinner实例
mLogLevelSpinner = findViewById(cc.winboll.studio.libappbase.R.id.viewlogSpinner1);
metTagSearch.addTextChangedListener(new TextWatcher() {
@Override
@@ -178,20 +178,25 @@ public class LogView extends RelativeLayout {
});
// 设置日志级别列表
ArrayList<String> adapterItems = new ArrayList<>();
for (LogUtils.LOG_LEVEL e : LogUtils.LOG_LEVEL.values()) {
adapterItems.add(e.name());
}
// ArrayList<String> adapterItems = new ArrayList<>();
// for (LogUtils.LOG_LEVEL e : LogUtils.LOG_LEVEL.values()) {
// adapterItems.add(e.name());
// }
String[] mLogLevelSpinnerData = new String[LogUtils.LOG_LEVEL.values().length];
for (int i = 0; i < LogUtils.LOG_LEVEL.values().length; i++) {
mLogLevelSpinnerData[i] = LogUtils.LOG_LEVEL.values()[i].name();
}
mLogLevelSpinner.setLogTagData(mLogLevelSpinnerData);
// 假设你有一个字符串数组作为选项列表
//String[] options = {"Option 1", "Option 2", "Option 3"};
// 创建一个ArrayAdapter来绑定数据到spinner
mLogLevelSpinnerAdapter = ArrayAdapter.createFromResource(
context, cc.winboll.studio.libappbase.R.array.enum_loglevel_array, android.R.layout.simple_spinner_item);
mLogLevelSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// mLogLevelSpinnerAdapter = ArrayAdapter.createFromResource(
// context, cc.winboll.studio.libappbase.R.array.enum_loglevel_array, android.R.layout.simple_spinner_item);
// mLogLevelSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// 设置适配器并将它应用到spinner上
mLogLevelSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // 设置下拉视图样式
mLogLevelSpinner.setAdapter(mLogLevelSpinnerAdapter);
// // 设置适配器并将它应用到spinner上
// mLogLevelSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // 设置下拉视图样式
// mLogLevelSpinner.setAdapter(mLogLevelSpinnerAdapter);
// 为Spinner添加监听器
mLogLevelSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
@@ -247,6 +252,8 @@ public class LogView extends RelativeLayout {
});
mLogLevelSpinner.updateTextSize(R.dimen.log_spinner_text_size);
// 设置滚动时不聚焦日志
setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
}

View File

@@ -0,0 +1,248 @@
package cc.winboll.studio.libappbase.widget;
import android.content.Context;
import android.graphics.Color;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.R;
/**
* @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
* @Date 2025/12/15 13:51
* @Describe 纯原生 LogTag 专属 Spinner无 androidx 依赖)
* 核心特性1. 继承原生 Spinner适配全 Android 版本2. dimen 统一配置所有尺寸3. 文字大小支持 dp 单位4. 简化外部初始化
*/
public class LogTagSpinner extends Spinner {
public static final String TAG = "LogTagSpinner";
Context mContext;
// 尺寸缓存dimen 解析后转 px避免重复计算
private int mSpinnerWidth; // 控件自身框度px
private int mSpinnerHeight; // 控件自身高度px
private int mItemWidth; // 下拉项单个高度px
private int mItemHeight; // 下拉项单个高度px
private float mTextSizePx; // 文字大小pxdp 转译后)
private int mTextPadding; // 文字左右内边距px
// 内置适配器(外部无需关心内部实现)
private ArrayAdapter<String> mLogTagAdapter;
// -------------------------- 构造方法(原生 Spinner 必重写 3 个)--------------------------
public LogTagSpinner(Context context) {
super(context);
initCoreLogic(context);
}
public LogTagSpinner(Context context, AttributeSet attrs) {
super(context, attrs);
initCoreLogic(context);
}
public LogTagSpinner(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initCoreLogic(context);
}
// -------------------------- 核心初始化(解析资源 + 配置样式 + 初始化适配器)--------------------------
private void initCoreLogic(Context context) {
this.mContext = context;
// 1. 读取 dimen 资源dp 转 px核心适配
parseDimenResources();
// 2. 设置 Spinner 自身基础样式(高度、背景)
configSelfStyle();
// 3. 初始化适配器(统一选中项+下拉项样式)
initCustomAdapter();
}
/**
* 步骤 1解析 dimen 资源,所有 dp 单位转为 px跨设备视觉一致
*/
private void parseDimenResources() {
Context context = this.mContext;
// 控件自身宽度dp → px
mSpinnerWidth = context.getResources().getDimensionPixelSize(R.dimen.log_spinner_width);
// 控件自身高度dp → px
mSpinnerHeight = context.getResources().getDimensionPixelSize(R.dimen.log_spinner_height);
// 下拉项宽度dp → px
mItemWidth = context.getResources().getDimensionPixelSize(R.dimen.log_spinner_item_width);
// 下拉项高度dp → px
mItemHeight = context.getResources().getDimensionPixelSize(R.dimen.log_spinner_item_height);
// 文字大小dp → px核心用 getDimensionPixelSize 确保 dp 精准转译)
mTextSizePx = context.getResources().getDimensionPixelSize(R.dimen.log_spinner_text_size);
// 文字内边距dp → px
mTextPadding = context.getResources().getDimensionPixelSize(R.dimen.log_spinner_text_padding);
LogUtils.d("LogTagSpinner", "dimen 解析完成:高度=" + mSpinnerHeight + "px文字大小=" + mTextSizePx + "px");
}
/**
* 步骤 2配置 Spinner 自身样式(覆盖布局属性,统一控制)
*/
private void configSelfStyle() {
// 动态设置控件高度(布局中 layout_height 设 wrap_content 即可,这里统一控制)
ViewGroup.LayoutParams layoutParams = getLayoutParams();
if (layoutParams != null) {
layoutParams.width = mSpinnerWidth;
layoutParams.height = mSpinnerHeight;
} else {
// 代码创建控件时,手动初始化布局参数
layoutParams = new ViewGroup.LayoutParams(
mSpinnerWidth,
mSpinnerHeight
);
}
setLayoutParams(layoutParams);
// 统一背景色(外部可通过 setBackground 手动覆盖)
setBackgroundColor(this.mContext.getColor(R.color.btn_gray_normal));
}
/**
* 步骤 3初始化自定义适配器统一选中项+下拉项样式
*/
private void initCustomAdapter() {
// 用原生系统布局(避免自定义布局,减少依赖),后续重写样式
mLogTagAdapter = new ArrayAdapter<String>(this.mContext, android.R.layout.simple_spinner_item) {
// 重写:控制「已选中项」的样式(文字大小、高度、内边距)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView itemTv = (TextView) super.getView(position, convertView, parent);
setItemUniformStyle(itemTv);
return itemTv;
}
// 重写:控制「下拉列表项」的样式(必须重写,否则下拉项样式不生效)
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
TextView itemTv = (TextView) super.getDropDownView(position, convertView, parent);
setItemUniformStyle(itemTv);
return itemTv;
}
};
// 绑定下拉项布局(原生系统布局,确保低版本兼容)
mLogTagAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// 设置适配器到 Spinner
setAdapter(mLogTagAdapter);
}
/**
* 通用方法:统一设置列表项(选中项/下拉项)的样式
*/
private void setItemUniformStyle(TextView itemTv) {
if (itemTv == null) return;
// 1. 文字大小(核心:按 px 赋值dp 转译后无二次换算,精准适配)
itemTv.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSizePx);
// 2. 列表项高度(固定高度,避免文字多少导致高度不一致)
itemTv.setWidth(mItemWidth);
itemTv.setHeight(mItemHeight);
// 3. 内边距(左右留白,优化排版,避免文字贴边)
itemTv.setPadding(mTextPadding, 0, mTextPadding, 0);
// 4. 文字对齐(垂直居中+靠左,符合常规 UI 设计)
//itemTv.setGravity(View.GRAVITY_CENTER_VERTICAL | View.GRAVITY_START);
// 5. 文字颜色(统一深色,可改为项目颜色资源)
itemTv.setTextColor(this.mContext.getColor(R.color.white));
itemTv.setBackgroundColor(this.mContext.getColor(R.color.btn_gray_normal));
// 6. 文字溢出处理(最多 2 行,超出省略,避免长标签换行过多)
itemTv.setSingleLine(false);
itemTv.setMaxLines(2);
itemTv.setEllipsize(TextUtils.TruncateAt.END);
}
// -------------------------- 外部调用 API极简用法无需关心内部逻辑--------------------------
/**
* 填充日志标签数据(外部核心调用,一行代码搞定)
* @param logTagArray 日志标签数组(如:{"TAG_MAIN", "TAG_NET", "TAG_DB"}
*/
public void setLogTagData(String[] logTagArray) {
if (mLogTagAdapter == null || logTagArray == null || logTagArray.length == 0) {
LogUtils.w("LogTagSpinner", "填充数据失败:适配器为空或数据无效");
return;
}
// 清空旧数据,添加新数据,刷新适配器
mLogTagAdapter.clear();
mLogTagAdapter.addAll(logTagArray);
mLogTagAdapter.notifyDataSetChanged();
}
/**
* 设置默认选中的标签(索引从 0 开始)
* @param defaultIndex 默认选中索引(需在 setLogTagData 之后调用)
*/
public void setDefaultSelectedTag(int defaultIndex) {
if (mLogTagAdapter == null) return;
// 索引合法性校验,避免数组越界
if (defaultIndex >= 0 && defaultIndex < mLogTagAdapter.getCount()) {
setSelection(defaultIndex);
LogUtils.d("LogTagSpinner", "默认选中标签:" + mLogTagAdapter.getItem(defaultIndex));
} else {
LogUtils.w("LogTagSpinner", "默认选中索引无效:" + defaultIndex);
}
}
/**
* 获取当前选中的日志标签(外部业务逻辑调用)
* @return 当前选中的标签文字(无选中时返回空字符串)
*/
public String getCurrentSelectedTag() {
Object selectedItem = getSelectedItem();
return selectedItem != null ? selectedItem.toString() : "";
}
// -------------------------- 优化扩展(可选,提升稳定性)--------------------------
/**
* 视图附着到窗口时,确保默认有数据(避免空指针)
*/
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (mLogTagAdapter != null && mLogTagAdapter.getCount() == 0) {
setLogTagData(new String[]{"默认标签"});
}
}
/**
* 外部扩展动态修改文字大小dp 单位)
* @param textSizeDp 目标文字大小dp
*/
public void updateTextSize(int textSizeDp) {
mTextSizePx = this.mContext.getResources().getDimensionPixelSize(textSizeDp);
// 刷新所有列表项样式
if (mLogTagAdapter != null) {
mLogTagAdapter.notifyDataSetChanged();
}
}
/**
* 外部扩展:动态修改文字颜色
* @param textColorRes 文字颜色资源 ID如 R.color.red
*/
public void updateTextColor(int textColorRes) {
int textColor = this.mContext.getResources().getColor(textColorRes);
// 刷新选中项颜色
TextView selectedTv = (TextView) getSelectedView();
if (selectedTv != null) {
selectedTv.setTextColor(textColor);
}
// 刷新下拉项颜色
if (mLogTagAdapter != null) {
mLogTagAdapter.notifyDataSetChanged();
}
}
}

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 按钮状态选择器:按优先级匹配(按压 > 禁用 > 默认) -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 状态 1按压时手指按住→ 深灰色 -->
<item android:color="@color/btn_gray_pressed" android:state_pressed="true"/>
<!-- 状态 2禁用时setEnabled(false))→ 浅灰色 -->
<item android:color="@color/btn_gray_disabled" android:state_enabled="false"/>
<!-- 状态 3默认态正常可点击→ 常规灰色 -->
<item android:color="@color/btn_gray_normal"/>
</selector>

View File

@@ -9,55 +9,60 @@
<RelativeLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_height="34dp"
android:layout_alignParentTop="true"
android:background="@drawable/bg_toolbar_log"
android:id="@+id/viewlogRelativeLayoutToolbar">
<Button
android:layout_width="wrap_content"
android:layout_width="@dimen/log_button_width"
android:layout_height="@dimen/log_button_height"
android:textSize="@dimen/log_text_size"
android:text="Clean"
android:textColor="@color/white"
android:backgroundTint="@drawable/btn_gray_bg"
android:layout_centerVertical="true"
android:id="@+id/viewlogButtonClean"
android:layout_marginLeft="5dp"/>
<TextView
android:background="#FF000000"
android:layout_width="wrap_content"
android:layout_height="@dimen/log_button_height"
android:layout_height="20dp"
android:textSize="@dimen/log_text_size"
android:padding="@dimen/log_text_padding"
android:text="LV:"
android:layout_toRightOf="@+id/viewlogButtonClean"
android:layout_centerVertical="true"
android:id="@+id/viewlogTextView1"
android:textColor="#FFFFFFFF"/>
android:background="@color/btn_gray_normal"
android:textColor="@color/black"/>
<Spinner
android:background="#FFFFFFFF"
<cc.winboll.studio.libappbase.widget.LogTagSpinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/viewlogTextView1"
android:layout_centerVertical="true"
android:id="@+id/viewlogSpinner1"
style="@style/LogActivitySpinnerStyle"/>
android:padding="@dimen/log_spinner_text_padding"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="@dimen/log_button_height"
android:layout_width="@dimen/log_checkbox_width"
android:layout_height="@dimen/log_checkbox_height"
android:textSize="@dimen/log_text_size"
android:layout_toLeftOf="@+id/viewlogButtonCopy"
android:layout_centerVertical="true"
android:text="Selectable"
android:background="#FFFFFFFF"
android:paddingRight="10dp"
android:id="@+id/viewlogCheckBoxSelectable"/>
android:background="@color/btn_gray_normal"
android:id="@+id/viewlogCheckBoxSelectable"
android:padding="@dimen/log_text_padding"
android:textColor="@color/white"/>
<Button
android:layout_width="wrap_content"
android:layout_width="@dimen/log_button_width"
android:layout_height="@dimen/log_button_height"
android:textSize="@dimen/log_text_size"
android:textColor="@color/white"
android:backgroundTint="@drawable/btn_gray_bg"
android:text="Copy"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"

View File

@@ -5,4 +5,70 @@
<color name="colorAccent">#FF8DFFA2</color>
<color name="colorText">#FFFFFB8D</color>
<color name="colorTextBackgound">#FF000000</color>
<!-- ============== 基础黑白(必含,适配文字/背景) ============== -->
<color name="white">#FFFFFF</color> <!-- 纯白色(文字/背景) -->
<color name="black">#000000</color> <!-- 近黑色(重要文字) -->
<!-- ============== 基础色系(按钮/强调色常用) ============== -->
<!-- 蓝色系(常用:确认/链接/主题色) -->
<color name="blue_light">#4A90E2</color> <!-- 浅蓝(次要按钮) -->
<color name="blue_normal">#2196F3</color> <!-- 标准蓝(主题/确认按钮) -->
<color name="blue_dark">#1976D2</color> <!-- 深蓝(按压态/重要强调) -->
<!-- 绿色系(常用:成功/完成/安全提示) -->
<color name="green_light">#66BB6A</color> <!-- 浅绿(次要成功态) -->
<color name="green_normal">#4CAF50</color> <!-- 标准绿(成功按钮/提示) -->
<color name="green_dark">#388E3C</color> <!-- 深绿(按压态/重要成功) -->
<!-- 红色系(常用:错误/警告/删除按钮) -->
<color name="red_light">#EF5350</color> <!-- 浅红(次要错误提示) -->
<color name="red_normal">#F44336</color> <!-- 标准红(删除/错误按钮) -->
<color name="red_dark">#D32F2F</color> <!-- 深红(按压态/重要错误) -->
<!-- 黄色系(常用:警告/提醒/高亮) -->
<color name="yellow_light">#FFF59D</color> <!-- 浅黄(次要提醒) -->
<color name="yellow_normal">#FFC107</color> <!-- 标准黄(警告提示/高亮) -->
<color name="yellow_dark">#FFA000</color> <!-- 深黄(重要警告) -->
<!-- 橙色系(常用:提醒/进度/活力色) -->
<color name="orange_normal">#FF9800</color> <!-- 标准橙(提醒按钮/进度) -->
<!-- 紫色系(常用:特殊强调/个性按钮) -->
<color name="purple_normal">#9C27B0</color> <!-- 标准紫(特殊功能按钮) -->
<!-- ============== 透明色(遮罩/背景叠加) ============== -->
<color name="transparent">#00000000</color> <!-- 全透明 -->
<color name="black_transparent_50">#80000000</color> <!-- 50%透明黑(遮罩) -->
<!-- 1. 不透明灰色(常用深浅梯度,直接用) -->
<color name="gray_100">#F5F5F5</color> <!-- 极浅灰(接近白色,背景用) -->
<color name="gray_200">#EEEEEE</color> <!-- 浅灰(卡片/分割线背景) -->
<color name="gray_300">#E0E0E0</color> <!-- 中浅灰(边框/次要背景) -->
<color name="gray_400">#BDBDBD</color> <!-- 中灰(次要文字/图标) -->
<color name="gray_500">#9E9E9E</color> <!-- 标准中灰(常用辅助文字) -->
<color name="gray_600">#757575</color> <!-- 中深灰(常规辅助文字) -->
<color name="gray_700">#616161</color> <!-- 深灰(重要辅助文字) -->
<color name="gray_800">#424242</color> <!-- 极深灰(接近黑色,标题副文本) -->
<color name="gray_900">#212121</color> <!-- 近黑色(特殊场景用) -->
<!-- 2. 半透明灰色(带透明度,遮罩/蒙层用) -->
<color name="gray_transparent_30">#4D9E9E9E</color> <!-- 30%透明中灰A=4D -->
<color name="gray_transparent_50">#809E9E9E</color> <!-- 50%透明中灰A=80 -->
<color name="gray_transparent_70">#B39E9E9E</color> <!-- 70%透明中灰A=B3 -->
<color name="gray_light">#EEE</color> <!-- 等价 #EEEEEE浅灰 -->
<color name="gray_mid">#999</color> <!-- 等价 #999999中灰 -->
<color name="gray_dark">#666</color> <!-- 等价 #666666深灰 -->
<color name="gray_black">#333</color> <!-- 等价 #333333极深灰 -->
<!-- 50% 透明中灰(弹窗遮罩常用) -->
<color name="mask_gray">#809E9E9E</color>
<!-- 30% 透明深灰(背景叠加) -->
<color name="bg_overlay_gray">#4D424242</color>
<!-- 1. 常规灰色(按钮默认态,常用中灰) -->
<color name="btn_gray_normal">#9E9E9E</color>
<!-- 2. 按压深色(按钮点击态,加深一级,提升交互感) -->
<color name="btn_gray_pressed">#757575</color>
<!-- 3. 禁用灰色(按钮不可点击态,浅灰) -->
<color name="btn_gray_disabled">#E0E0E0</color>
</resources>

View File

@@ -1,7 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 定义一个名为image_width的尺寸值为200dp -->
<dimen name="log_button_height">34dp</dimen>
<!-- 定义一个名为text_size_normal的尺寸值为16sp -->
<dimen name="log_text_size">12dp</dimen>
<dimen name="log_text_padding">2dp</dimen>
<dimen name="log_button_width">65dp</dimen>
<dimen name="log_button_height">34dp</dimen>
<dimen name="log_checkbox_width">100dp</dimen>
<dimen name="log_checkbox_height">20dp</dimen>
<dimen name="log_spinner_width">60dp</dimen>
<dimen name="log_spinner_height">16dp</dimen>
<dimen name="log_spinner_item_width">@dimen/log_spinner_width</dimen>
<dimen name="log_spinner_item_height">@dimen/log_spinner_height</dimen>
<dimen name="log_spinner_text_size">@dimen/log_text_size</dimen>
<dimen name="log_spinner_text_padding">@dimen/log_text_padding</dimen>
</resources>

View File

@@ -12,16 +12,4 @@
<item name="colorTextBackgound">#FF000000</item>
</style>
<!-- 定义 Spinner 下拉项的文字样式 -->
<style name="LogActivitySpinnerItemTextStyle" parent="@android:style/Widget.Spinner">
<item name="android:textSize">@dimen/log_text_size</item> <!-- 目标文字大小 -->
<!--<item name="android:textColor">#333333</item>--> <!-- 文字颜色 -->
<item name="android:layout_height">@dimen/log_button_height</item> <!-- 下拉项高度 -->
</style>
<!-- 定义 Spinner 全局默认样式 -->
<style name="LogActivitySpinnerStyle" parent="@android:style/Widget.Spinner">
<item name="android:dropDownItemStyle">@style/LogActivitySpinnerItemTextStyle</item>
</style>
</resources>