Button继承于TextView;
button控件比较简单,直接上代码
ButtonDemoActivity文件:
package com.potato;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class ButtonDemoActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btnTest = (Button) findViewById(R.id.btn_test);
// 匿名内部类实现OnClickListener
btnTest.setOnClickListener(new Button.OnClickListener() { // 注1
@Override
public void onClick(View v) {
Intent intent = new Intent(); // 注2
intent.setClass(ButtonDemoActivity.this,
ThemeDialogActivity.class);
// 启动ThemeDialogActivity通过Intent
ButtonDemoActivity.this.startActivity(intent);
}
});
// 多个按钮时,处理事件就最好在实现下OnLongClickListener接口(不用匿名内部类),
// 可以一起处理,不然重复代码过多.
// 处理时长按事件,不是点击事件.
btnTest.setOnLongClickListener(new LongClickListener()); // 注1
Button btnLongClickTest = (Button) findViewById(R.id.btn_long_click_test);
btnLongClickTest.setOnLongClickListener(new LongClickListener());
}
/**
* 实现接口OnLongClickListener
* @author Administrator
*
*/
private class LongClickListener implements Button.OnLongClickListener { // 注1
@Override
public boolean onLongClick(View v) {
// 根据view的id进行区分View // 注3
switch (v.getId()) {
case R.id.btn_test: {
Toast.makeText(ButtonDemoActivity.this, "long click btn_test",
Toast.LENGTH_SHORT).show();
}
break;
case R.id.btn_long_click_test: {
Toast.makeText(ButtonDemoActivity.this,
"long click btn_long_click_test", Toast.LENGTH_SHORT)
.show();
}
break;
default:
break;
}
return true;
}
}
}
注1:
(1)setOnClickListener,点击事件响应.
事件监听器.
一般使用匿名内部类,除了有很多button,代码过于相似,才另外实现一个有名的类.
(2)setOnLongClickListener,长按事件响应.
注2:
视图的切换,通过inetnt,在后面的章节会有细说.
注3:
多个事件监听器,分开处理,识别各视图通过他们的id进行区分.
mian.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_edit_backgroud"
android:editable="false"
android:text="@string/hello" />
<Button
android:id="@+id/btn_test"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/button_theme"
android:text="@string/btn_test"/>
<Button
android:id="@+id/btn_long_click_test"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/button_theme"
android:text="@string/btn_long_click_test"/>
</LinearLayout>
ThemeDialogActivity文件:
package com.potato;
import android.app.Activity;
import android.os.Bundle;
public class ThemeDialogActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.theme_dialog);
}
}
theme_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical|center_horizontal"
android:text="@string/custom_dialog_activity_text"
/>
这里还有注意下AndroidManifest.xml
由于新增加了一个activity,所以必须在在这个文件中注册
<activity
android:label="@string/app_name"
android:name=".ThemeDialogActivity"
android:theme="@style/Theme.CustomDialog">
<intent-filter >
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
这里这些具体的意思会在后面的文章只能够解释.
这里注意一个属性,android:theme="@style/Theme.CustomDialog"
就是设置主题的,
在value目录下生成一个styles.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.CustomDialog" parent="android:style/Theme.Dialog">
<item name="android:windowBackground">@drawable/filled_box</item>
</style>
</resources>
<item name="android:windowBackground">@drawable/filled_box</item>,这里的drawable文件也是自定义的文件.这个文件是放在res下自定义的drawable文件下
filled_box.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#f0600000"/>
<gradient android:startColor="#FFFF0000" android:endColor="#80FF33FF"
android:angle="270"/>
<stroke android:width="2dp" android:color="#ee31ff5e"
android:dashWidth="6dp" android:dashGap="2dp" />
<corners android:radius="20dp" />
<padding android:left="10dp" android:top="10dp"
android:right="10dp" android:bottom="10dp" />
</shape>
shape_edit_backgroud.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- solid:实心,就是填充的意思
android:color指定填充的颜色 -->
<solid
android:color="#FFFFFF"/>
<!-- corners:圆角
android:radius为角的弧度,值越大角越圆 -->
<corners
android:radius="7dip"/>
<!-- gradient:渐变
android:startColor和android:endColor分别为起始和结束颜色;
android:angle是渐变角度,必须为45的整数倍。
另外渐变默认的模式为android:type="linear",即线性渐变,
可以指定渐变为径向渐变,android:type="radial",
径向渐变需要指定半径android:gradientRadius="50"。 -->
<gradient
android:startColor="#FFFF0000"
android:endColor="#80FF33FF"
android:type="radial"
android:gradientRadius="100" />
<!-- stroke:描边
android:width="2dp" 描边的宽度,
android:color 描边的颜色。
我们还可以把描边弄成虚线的形式,设置方式为:
android:dashWidth="5dp"
android:dashGap="3dp"
其中android:dashWidth表示'-'这样一个横线的宽度,
android:dashGap表示之间隔开的距离。-->
<stroke
android:width="2dp"
android:color="#dcdcdc"
android:dashWidth="5dp"
android:dashGap="3dp" />
<padding
android:left="10dip"
android:right="10dip"
android:top="10dip"
android:bottom="10dip"
/>
</shape>
这里熟悉一下stroke,padding ,gradient,corners,solid等几个属性,具体的上面写的挺详细的,这里就不解释了
button_theme.xml
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android"
android:constantSize="true">
<item android:state_pressed="true" >
<shape>
<gradient
android:startColor="#ff8c00"
android:endColor="#FFFFFF"
android:angle="270" />
<stroke
android:width="2dp"
android:color="#dcdcdc" />
<corners
android:radius="2dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item android:state_focused="true" >
<shape>
<gradient
android:startColor="#ffc2b7"
android:endColor="#ffc2b7"
android:angle="270" />
<stroke
android:width="2dp"
android:color="#dcdcdc" />
<corners
android:radius="2dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item >
<shape>
<gradient
android:startColor="#ff9d77"
android:endColor="#ff9d77"
android:angle="270" />
<stroke
android:width="2dp"
android:color="#fad3cf" />
<corners
android:radius="2dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
</selector>
注:以上几个文件都是设置主题时用到的自定义的drawble文件
对于button主题,就是设置它的backgroud属性,
可以像button_theme.xml文件一样的设置,也可以如下设置
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/ic_launcher" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/ic_launcher" /> <!-- focused -->
<item android:drawable="@drawable/ic_launcher" /> <!-- default -->
</selector>
<!--
<?xml version="1.0" encoding="utf-8"?>
<selector
//Defines the XML namespace, which must be "http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
android:constantSize=["true" | "false"]
android:dither=["true" | "false"]
android:variablePadding=["true" | "false"] >
<item
android:drawable="@[package:]drawable/drawable_resource"
android:state_pressed=["true" | "false"]
android:state_focused=["true" | "false"]
android:state_hovered=["true" | "false"]
android:state_selected=["true" | "false"]
android:state_checkable=["true" | "false"]
android:state_checked=["true" | "false"]
android:state_enabled=["true" | "false"]
android:state_window_focused=["true" | "false"] />
</selector>
-->
有疑问请发邮件或留言:
邮箱:ligexiao@gmail.com