`

Android UI中的style和theme以及AlertDialog

阅读更多

 

1.sytle:Android中的style就是用简单的配置来实现页面的外观和风格的方式。他是一个包含一个或者多个view控件属性的集合,可以当成一个整体应用到XML单个元素上。

例如我们可以在res/values/styles.xml文件,键入代码:

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<style name="style1"> <!-- 为样式定义一个全局唯一的名字-->
		<item name="android:textSize">18px</item> <!-- name属性为样式要用在的View控件持有的属性 -->
		<item name="android:textColor">#0000CC</item>
		<!--
			等等……
		-->
		<item name="android:layout_width">60dip</item>
		<item name="android:layout_height">50dip</item>
		<item name="android:layout_weight">1</item>
		<item name="android:divider">#FFCFCFCF</item>
		<item name="android:dividerHeight">0.5dip</item>
		<item name="android:listSelector">@drawable/list_item_bg</item>
		<item name="android:cacheColorHint">#00000000</item>
	</style>
	
	<style name="TitleStyle">
		<item name="android:textSize">18sp</item>
		<item name="android:textColor">#ec9237</item>
	</style>
	
	<style name="LinkStyle">
		<item name="android:textSize">18sp</item>
		<item name="android:textColor">#ec0032</item>
		<item name="android:fromAlpha">0.0</item>
		<item name="android:toAlpha">0.0</item>
	</style>
	
	<style name="SpecialText">
		<item name="android:textSize">28sp</item>
		<item name="android:textColor">@color/darkgreen</item>
		<item name="android:gravity">center</item>
		<item name="android:textStyle">bold|italic</item>
		<item name="android:background">@drawable/icon</item>
	</style>
</resources>
 

这其实也就是把view的属性罗列出来,用一个view关联。这样在遇到view配置相同的属性的时候就可以直接通过这个名字直接关联这样的样式设置了。其实这个还想是WEB开发中的CSS的使用。就是把view的属性单独写出,提高重用性。

在layout文件中可以像下面这样使用上面的android样式:

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" 
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<TextView style="@style/TitleStyle" 
		android:layout_width="fill_parent"
		android:layout_height="wrap_content" 
		android:gravity="center_vertical|center_horizontal"
		android:text="txlong_onz ai slna" />
	<TextView style="@style/LinkStyle" 
		android:layout_width="fill_parent"
		android:layout_height="wrap_content" 
		android:gravity="center_vertical|center_horizontal"
		android:text="http://txlong-onz.iteye.com" 
		android:autoLink="all" />
	<TextView style="@style/SpecialText" 
		android:layout_width="fill_parent"
		android:layout_height="wrap_content" 
		android:gravity="center_vertical|center_horizontal"
		android:text="SpecialText" />
</LinearLayout>

  <style>标签中有一个parent属性。这个属性可以让当前样式继承一个父样式,当前样式可以继承到父样式的值。当然,如果父样式的值不符合你的需求,你也可以对它进行修改,和CSS中的覆盖效果一样,都是以最后的为准,例子如下:

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<style name="style1">
		<item name="android:textSize">18px</item> <!-- name属性为样式要用在的View控件持有的属性 -->
		<item name="android:textColor">#0000CC</item>
	</style>
	<style name="subitcast" parent="@style/style1">
		<item name="android:textColor">#FF0000</item>
	</style>
</resources>

 样式的继承,一种是继承平台自带的。一种是继承自定义的样式。继承平台原有的一定要parent指定。

 

<style name="GreenText" parent="@android:style/TextAppearance">
	<item name="android:textColor">#00FF00</item>
</style> 

 继承自定义的只需在name前加要继承的style主题就行了。<style name="GreenText.Red">

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

 这种方法可以不断地继承

 

<style name="CodeFont.Red.Big">
	<item name="android:textSize">30sp</item>
</style>

2.theme:Android主题设置其实就是将主题添加到一个配置里,以方便调用,提高重用性。所以配置文件的属性也就是窗口等的主题样式。

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<style name="theme1">
		<item name="android:windowNoTitle">true</item>
		<item name="android:windowFullscreen">?android:windowNoTitle</item>
	</style>
</resources>

上面"?android:windowNoTitle"中的问号用于引用在当前主题中定义过的资源的值。下面代码显示在AndroidManifest.xml中如何为应用设置上面定义的主题:

 

<application android:icon="@drawable/icon" android:label="@string/app_name"
	android:theme="@style/theme1">
	<activity android:name=".MessageShowActivity" android:label="@string/app_name"
		android:windowSoftInputMode="adjustPan" android:screenOrientation="portrait"
		android:theme="@style/theme2">
	</activity>
</application>

除了可以在AndroidManifest.xml中设置主题,同样也可以在代码中设置主题,如下:

setTheme(R.style.theme1);

尽管在定义上,样式和主题基本相同,但是它们使用的地方不同。样式用在单独的View,如:EditText、TextView等;主题通过AndroidManifest.xml中的<application>和<activity>用在整个应用或者某个 Activity,主题对整个应用或某个Activity存在全局性影响。如果一个应用使用了主题,同时应用下的view也使用了样式,那么当主题与样式属性发生冲突时,样式的优先级高于主题。

另外android系统也定义了一些主题,例如:

<activity android:theme="@android:style/Theme.Dialog">,该主题可以让Activity看起来像一个对话框,

<activity android:theme="@android:style/Theme.Black.NoTitleBar">Variant of the light theme with no title bar,系统自带的黑色主题。如果需要查阅这些主题,可以在文档的reference-->android-->R.style 中查看。

3.AlertDialog的使用Demo:



 主要的类在这里粘出来,style和theme自己下载下边的附件。

 

public class StyleThemeTest extends Activity {
	public final String TAG = "Test";
	private Dialog mDialog;
	private Button button1;
	private Button button2;
	private Button button3;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		StyleThemeTest.this.setTheme(R.style.theme1);
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		button1 = (Button) findViewById(R.id.button1);
		button2 = (Button) findViewById(R.id.button2);
		button3 = (Button) findViewById(R.id.button3);

		button1.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				mDialog = new AlertDialog.Builder(StyleThemeTest.this)
						.setIcon(android.R.drawable.ic_dialog_alert)
						.setTitle("Warning!")
						.setMessage("Are you sure to Follow or UnFollow the friend?")
						.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog, int whichButton) {
									Log.v(TAG, "OK");
								}
							})
						.setNeutralButton("Cancel",new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog, int whichButton) {
									Log.v(TAG, "Cancale");
								}
							}).create();
				mDialog.show();// 如果要显示对话框,一定要加上这句
			}
		});
		button2.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				Builder builder = new AlertDialog.Builder(StyleThemeTest.this);
				builder.setIcon(android.R.drawable.alert_dark_frame);
				builder.setTitle("AlertDialog Title.");
				builder.setMessage("What do think about this?");
				builder.setNegativeButton("好", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						Log.v(TAG, "good");
					}
				});
				builder.setNeutralButton("中立", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						Log.v(TAG, "just soso");
					}
				});
				builder.setPositiveButton("不好", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						Log.v(TAG, "bad");
					}
				});
				builder.create().show();
			}
		});
		button3.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				new AlertDialog.Builder(StyleThemeTest.this)
				.setMessage("There is a xxxxxxxxxxxx error hanppened!!!")
				.setPositiveButton("知道了!", new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {
						Log.v(TAG, "I KNOW.");
					}
				}).create().show();
			}
		});
	}
}

 

  • 大小: 15.7 KB
分享到:
评论

相关推荐

    Android之修改AlertDialog对话框及使用系统Holo风格

    在Android开发中,`AlertDialog`是系统提供的一种...以上就是关于在Android中自定义`AlertDialog`以及应用Holo风格的详细步骤和相关知识点。通过这些知识,你可以为用户提供更加符合系统风格且具有交互性的对话框体验。

    Android应用源码之Android中实现Iphone样式的AlertDialog_实现.zip

    在提供的源码中,我们可以期待看到以上步骤的具体实现,包括自定义布局文件的XML代码、Java或Kotlin代码中的AlertDialog构建逻辑,以及可能的样式和动画配置。通过学习和理解这个源码,开发者可以更好地掌握如何在...

    Android UI设计--半透明效果对话框

    在Android应用开发中,UI设计是至关重要的一个环节,它直接影响到用户体验和应用的整体美观。半透明效果对话框是Android UI设计中一种常见的交互元素,它可以在不影响用户对背景界面操作的同时,提供一种轻量级的...

    Android alertDialog对话框.rar

    在Android开发中,`AlertDialog`是用户界面(UI)组件之一,用于显示警告或确认信息,通常用于在关键操作前获取用户的确认或者提供简单的选择。`AlertDialog`比普通的`Dialog`更加正式,常用于提示用户可能有风险的...

    AlertDialog

    - `AlertDialog`必须在UI线程中创建和显示。 - 使用`show()`方法来显示对话框,而不是`create()`,因为`create()`只是初始化对话框,但不会显示。 总之,`AlertDialog`在Android开发中扮演着重要的角色,能够灵活...

    Android例子源码安卓实现Iphone样式的AlertDialog

    在Android系统中,AlertDialog是用户界面(UI)组件之一,用于展示重要的信息或者进行简单的用户交互。本篇将详细介绍如何在Android中实现一个类似iPhone样式的AlertDialog,并通过分析提供的源码来深入理解其工作...

    alertDialog 自定义 圆角 无黑边问题

    在Android开发中,`AlertDialog`是系统提供的一种用于与用户交互的对话框,通常用于显示警告、确认或者请求用户输入信息。然而,系统的默认样式可能无法满足所有设计需求,因此开发者有时需要对其进行自定义,例如...

    自定义Android Dialog EditText 密码输入框

    在Android开发中,自定义Dialog是一项常见的需求,它允许开发者根据应用的UI风格和功能需求进行个性化设计。本文将深入探讨如何自定义一个Android Dialog,特别是实现一个类似于支付密码输入框的功能,其中EditText...

    android 加载中效果

    总的来说,实现Android中的加载中效果涉及到UI设计、布局构建、Dialog实例化、状态管理等多个方面。开发者可以根据项目需求选择适合的方法,以创建既有视觉吸引力又能有效提升用户体验的加载等待效果。在实际开发...

    精美的对话框 AlertDialog 作者nifty

    在Android开发中,`AlertDialog`是一种常见的用户交互组件,用于展示重要的信息或获取用户的确认、选择等反馈。本文将深入探讨由作者nifty创建的精美`AlertDialog`实现,该实现提供了丰富的视觉效果和定制选项。 ...

    Android 对话框中的进度条 ProgressDialog

    在Android应用开发中,...虽然在新版本的Android中被弃用,但它仍然是学习Android UI和异步处理的重要知识点。理解ProgressDialog的工作原理和替代方案,可以帮助开发者创建更加友好且适应性强的用户体验。

    Android 普通对话框源码.zip

    Android允许开发者通过设置不同的主题(Theme)和样式(Style)来改变对话框的外观。在源码中,你可以看到如何通过设置主题属性(如android:theme)来改变对话框的整体风格。 6. **对话框的生命周期** 对话框有...

    dialogstyle 去掉背景白色框

    本篇文章将详细介绍如何在Android中去除Dialog的白色边框,以实现"dialogstyle 去掉背景白色框"的目标。 首先,我们需要了解Dialog的基本结构。Dialog是基于AlertDialog类或者自定义的DialogFragment构建的,通常...

    Android底部弹出对话框

    总之,Android底部弹出对话框的实现涉及到了样式定义、动画资源的创建和使用,以及在代码中动态构建和显示对话框。这样的功能不仅提升了应用的视觉效果,还能提高用户的操作便捷性,是Android应用开发中的一个重要...

    透明与窗体的设置

    通过上述介绍可以看出,Android平台提供了丰富的工具和选项来帮助开发者定制UI界面,包括自定义对话框、标题栏以及透明效果等。这对于提高应用程序的用户体验非常重要。开发人员可以根据项目需求灵活选择合适的方法...

    Android datetimepicker实现挺不错的时间选择器,分为日期选择器和时钟选择器。-IT计算机-毕业设计.zip

    总的来说,这个毕业设计项目涵盖了Android开发中的多个关键知识点,包括UI组件的使用(DatePicker和TimePicker)、自定义对话框的创建、事件监听、数据对象的处理以及版本兼容性。通过学习和分析这个源码,学生可以...

    Android自定义加载对话框

    在Android开发中,自定义对话框(Custom Dialog)是一个常用的功能,它允许开发者根据应用的UI风格和需求创建独特、个性化的提示或加载界面。本文将深入探讨如何在Android中实现一个自定义加载对话框,以及如何实现...

    安卓Android源码——MyAlertDialog.rar

    此外,开发者可能会在源码中看到对样式和主题的调整,这通常是通过`setStyle(int style, int theme)`方法完成的。风格和主题可以改变对话框的外观,使其与应用程序的整体设计保持一致。 在`MyAlertDialog`中,...

    android service弹出对话框

    AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, android.R.style.Theme_DeviceDefault_Dialog)); builder.setMessage("服务需要您的确认"); builder.setPositiveButton(...

Global site tag (gtag.js) - Google Analytics