TextView:
TextView可以说是Android中最简单的基本控件,主要是用来在界面上显示一段文字和特效的效果的显示。
TextView中一些属性和它的作用:
Android所有控件都必须包含两个属性 wrap_content、match_parent(fill_parent),其中match_parent和fill_parent意思相同
Android官方推荐我们用match_parent。match_parent表示让当前控件的大小个父布局的大小一样,也就是由父布局来决定当前空间的大小。wrap_content表示让当前控件的大小能够刚好里面的内容,也就是说控件的大小由当前的控件决定。
android:text 设置显示文本
Android :autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)
android:textSize:设置文本的大小
android:textColor:设置文本的颜色
android:textStyle:设置文本的样式
android:singleLine:让文本显示一行
android:id 代表控件的一个标示id
android:typeface:设置文本的字体样式
android:ellipsize:当一段文字过长 怎样处理呢 “start”表示省号在开始 “end”表示省号在后面 "middle" 表示省号在中间
android:gravity:设置文本显示的位置 当设置“center” 表示文字在中间
Button:
button代表一个按钮 当用户点击 会触发事件,来执行某一个动作。以下是一个用户执行的动作
<Button
android:id="@+id/btn"
anroid:layout_width="wrap_content"
android:layout_height:="wrap_content"
/>
Button button=(Button)findByView(R.id.btn);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
第二种 直接在xml布局中 用 android:onClick 属性为按钮指定方法名,以代替在活动中使用的 OnClickListener
<Button
android:onClick="BtnOnclick"
anroid:layout_width="wrap_content"
android:layout_height:="wrap_content"
/>
现在,当用户点击按钮时,Android系统调用activity的BtnOnclick(View)方法。为了正确执行,这个方法必须是public并且仅接受一个View类型的参数。例如:
public void BtnOnclick(View view){
}
RadioButton和CheckBox:
RadioButton一般由Radiobutton和Radiogroup组成的 当构成了一个Radiogroup 只能单选Radiobutton 没有Radiogroup 可以多个选择Radiobutton 。
CheckBox 可以选择一个或多个checkbox 。
RadioButton和RadioGroup的关系:
1、RadioButton表示单个圆形单选框,而RadioGroup是可以容纳多个RadioButton的容器
2、每个RadioGroup中的RadioButton同时只能有一个被选中
3、不同的RadioGroup中的RadioButton互不相干,即如果组A中有一个选中了,组B中依然可以有一个被选中
4、大部分场合下,一个RadioGroup中至少有2个RadioButton
5、大部分场合下,一个RadioGroup中的RadioButton默认会有一个被选中,并建议您将它放在RadioGroup中的起始位置
xml:
android:checked="true" 代表是默认选择了
<?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" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="请选择您的性别:"
android:textSize="9pt" />
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="性别" >
<RadioButton
android:id="@+id/radioMale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="男" >
</RadioButton>
<RadioButton
android:id="@+id/radioFemale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女" >
</RadioButton>
</RadioGroup>
<TextView
android:id="@+id/tvSex"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="您的性别是:男"
android:textSize="9pt" />
class:
TextView tv = null;//根据不同选项所要变更的文本控件
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//根据ID找到该文本控件
tv = (TextView)this.findViewById(R.id.tvSex);
//根据ID找到RadioGroup实例
RadioGroup group = (RadioGroup)this.findViewById(R.id.radioGroup);
//绑定一个匿名监听器
group.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup arg0, int arg1) {
// TODO Auto-generated method stub
//获取变更后的选中项的ID
int radioButtonId = arg0.getCheckedRadioButtonId();
//根据ID获取RadioButton的实例
RadioButton rb = (RadioButton)MyActiviy.this.findViewById(radioButtonId);
//更新文本内容,以符合选中项
tv.setText("您的性别是:" + rb.getText());
}
});
}
RadioButton和checkbox的区别
1、Radiobutton 当勾选了,再点击是不能改变没有选择 ,而checkbox 再次点击是可以改变没有选中的
2、Radiobutton的形状是圆圈型的 而checkbox的形状是矩形的。
<CheckBox xmlns:android=
android:id="@+id/check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This checkbox is: unchecked" />
public class MainMenu extends Activity implements CompoundButton.OnCheckedChangeListener{
CheckBox cb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
cb=(CheckBox)findViewById(R.id.check);
cb.setOnCheckedChangeListener(this);
}
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
cb.setText("This checkbox is: checked");
}
else {
cb.setText("This checkbox is: unchecked");
}
}
}
ImageButton:
显示一个可以被用户点击的图片按钮,默认情况下,ImageButton看起来像一个普通的按钮,在不同状态(如按下)下改变背景颜色。按钮的图片可用通过<ImageButton> XML元素的android:src属性或setImageResource(int)方法指定。
为了表示不同的按钮状态(焦点,选择等),你可以为各种状态定义不同的图片。一个简单的方法可以做到这点——通过XML的"selector."配置,如下:
一.创建xml文件,位置:drawable/xxx.xml,同目录下记得要放相关图片
相关属性:
android:state_selected是选中
android:state_focused是获得焦点
android:state_pressed是点击
android:state_enabled是设置是否响应事件,指所有事件
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="
http://schemas.android.com/apk/res/android
">
<!-- 默认时的背景图片-->
<item android:drawable="@drawable/pic1" />
<!-- 没有焦点时的背景图片 -->
<item android:state_window_focused="false"
android:drawable="@drawable/pic1" />
<!-- 非触摸模式下获得焦点并单击时的背景图片 -->
<item android:state_focused="true" android:state_pressed="true" android:drawable= "@drawable/pic2" />
<!-- 触摸模式下单击时的背景图片-->
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/pic3" />
<!--选中时的图片背景-->
<item android:state_selected="true" android:drawable="@drawable/pic4" />
<!--获得焦点时的图片背景-->
<item android:state_focused="true" android:drawable="@drawable/pic5" />
</selector>
根据这些状态同样可以设置button的selector效果。也可以设置selector改变button中的文字状态。
以下是配置button中的文字效果:
drawable/button_font.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="
http://schemas.android.com/apk/res/android
">
<item android:state_selected="true" android:color="#FFF" />
<item android:state_focused="true" android:color="#FFF" />
<item android:state_pressed="true" android:color="#FFF" />
<item android:color="#000" />
</selector>
写好的效果给指定的imagebutton
<ImgeButton
android:width="wrap_content"
android:height="match_parent"
android:backgroup="@drawable/button_font"
/>
imagebutton还可以实现更复杂的效果,例如渐变
drawable/button_color.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="
http://schemas.android.com/apk/res/android
">
//定义当button 处于pressed 状态时的形态。
<item android:state_pressed="true">
<shape>
<gradient android:startColor="#8600ff" />
<stroke android:width="2dp" android:color="#000000" />
<corners android:radius="5dp" />
<padding android:left="10dp" android:top="10dp"
android:bottom="10dp" android:right="10dp"/>
</shape>
</item>
//定义当button获得 focus时的形态
<item android:state_focused="true">
<shape>
<gradient android:startColor="#eac100"/>
<stroke android:width="2dp" android:color="#333333" color="#ffffff"/>
<corners android:radius="8dp" />
<padding android:left="10dp" android:top="10dp"
android:bottom="10dp" android:right="10dp"/>
</shape>
</item>
</selector>
ImageView:
iamgeview是用于在界面上展示的一个控件 ,通过他可以让我们的程序界面变得更加的丰富。显示图片的资源来源任何地方都可以。
<Imageview
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="drawavle/显示的图片"
/>
我们还可以在程序中通过代码动态更改imageview中的图片,例如图片jelly_bean.png 将他复制到res/drawable_hdpi目录下,然后修改MainActivity的代码,这里写主要的代码
ImageView img=(ImageView)findViewById(R.id.img);
获取drawableres/drawable_hdpi目录下的资源
img.setImageResource(R.drawable.jelly_bean);
ProgressBar:
用于在界面上显示一个进度条,表示我们的程序正在加载一些数据。
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="wrap_content"
android:layout_height="match_parent"
/>
启动程序时 会看到有一个圆形进度条正在旋转。那么怎么样取消呢 这里要用到android:visibility进行指定,可选值有三个,visible、invisible、gone 。visible表示是可见的 默认的 invisible表示不可见 但它任然占据着原来的位置和大小。可以理解控件成透明状态了。gone 表示不可见 而且不占据着原来的位置和大小。
ProgressBar progress=(ProgressBar)findViewById(R.id.progressbar);
通过一个按钮 来控制progressbar是否显示或不显示
button.setOnClickListener(new OnClickListener){
public void onClick(View v){
if(progress.getVisibility()==View.GONE){
progress.setVisibility(View.VISIBLE);
}
else{
progress.setVisibility(View.GONE);
}
}
另外 我们还可以给progressBar指定不同的样式,刚刚是圆形进度条,通过style属性可以将他指定成水平进度条,修改xml布局中的代码 添加一行代码 style="?android:attr/progressBarStyleHorizontal"
Spinner:
下拉列表(Spinner)是一个每次只能选择所有项中一项的部件。它的项来自于与之相关联的适配器中。
1、建一个新的项目,打开res/values/strings.xml文件,写入如下代码:
< ?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MainHelloSpinner</string >
<string name="color">选择色彩:</string>
<string name="colors" array="">
<ITEM></ITEM>黑色 | Black</ITEM>
<ITEM>蓝色 | Blue</ITEM>
<ITEM>棕色 | Brown</ITEM>
<ITEM>绿色 | Green</ITEM>
<ITEM>灰色 | Grey</ITEM>
<ITEM>粉色 | Pink</ITEM>
<ITEM>紫色 | Purple</ITEM>
<ITEM>红色 | Red</ITEM>
<ITEM>白色 | White</ITEM>
<ITEM>黄色 | Yellow</ITEM>
</string>
</resources>
2、打开res/layout/main.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="wrap_content"
android:orientation="vertical"
android:padding="10dip" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:text="@string/color" />
<Spinner
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:prompt="@string/color" />
</LinearLayout>
3、打开MainHelloSpinner.java 写入下内容:
package android.basic.lesson10;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
public class MainHelloSpinner extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//找到Xml中定义的下拉列表
Spinner spinner = (Spinner)findViewById(R.id.spinner);
//准备一个数组适配器
ArrayAdapter adapter = ArrayAdapter.createFromResource(
this, R.array.colors, android.R.layout.simple_spinner_item);
//设置下拉样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//为下拉列表设置适配器
spinner.setAdapter(adapter);
//定义子元素选择监听器
OnItemSelectedListener oisl= new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainHelloSpinner.this,"选择的色彩: " +
parent.getItemAtPosition(position).toString(), Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
};
//为下拉列表绑定事件监听器
spinner.setOnItemSelectedListener(oisl);
}
}
效果:
WebView:
WebView是View的一个子类,可以让你在activity中显示网页。
可以在布局文件中写入WebView:比如下面这个写了一个填满整个屏幕的WebView:
<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="
http://schemas.android.com/apk/res/android
"
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
加载一个网页 使用loadUrl():
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl(
http://www.example.com
);
注意要在manifest中加上访问网络的权限:
<manifest ... >
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>
设置WebView要显示的网页
设置WevView要显示的网页方法有很多:
互联网页面直接用:
myWebView.loadUrl(“http://www.google.com“);
本地文件用:
myWebView.loadUrl(“file:///android_asset/XX.html“);
本地文件存放在:assets文件中。
还可以直接载入html的字符串,如:
String htmlString = "<h1>Title</h1><p>This is HTML text<br /><i>Formatted in italics</i><br />Anothor Line</p>";
// 载入这个html页面
myWebView.loadData(htmlString, "text/html", "utf-8");
在WebView中使用JavaScript
如果你想要载入的页面中用了JavaScript,你必须为你的WebView使能JavaScript。
一旦使能之后,你也可以自己创建接口在你的应用和JavaScript代码间进行交互。
使能JavaScript
可以通过getSettings()获得WebSettings,然后用setJavaScriptEnabled()使能JavaScript:
WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
WebSettings中提供了很多有用的设置。
处理页面浏览
当用户点击了你的WebView中的一个链接,默认的行为是Android启动一个处理URL的应用,通常,默认的浏览器打开并下载目标URL。
但是,你可以在你的WebView中覆盖这一行为,使得连接仍在你的WebView中打开。
之后,根据在WebView中维护的网页浏览历史,你可以允许用户向前或向后浏览他们的网页。
在WebView中打开所有链接
要打开用户点击的链接,只需要用setWebViewClient()方法向你的WebView提供一个WebViewClient 比如:
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient());
此时就OK了, 就可以在你的WebView中打开链接了。
关于打开链接位置的更多控制
如果你对在哪里打开链接需要更多的控制,你可以创建自己的类,继承 WebViewClient,然后覆写 shouldOverrideUrlLoading() 方法。
比如下面这个:
private class MyWebViewClient extends WebViewClient
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
if(Uri.parse(url).getHost().equals(www.example.com))
{
// This is my web site, so do not override; let my WebView load
// the page
return false;
}
// Otherwise, the link is not for a page on my site, so launch
// another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}
将特定的链接用自己的WebView打开,其他链接用浏览器(intent启动了默认的处理URL的Activity)。
定义完之后把这个类的对象传入setWebViewClient()方法即可。
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new MyWebViewClient());
实践验证:在直接设置setWebViewClient(new WebViewClient());时验证正确,即所有链接都是在WebView中打开。
在设置为自定义的WebViewClient子类对象时,发现链接仍然都是从默认浏览器中打开。
浏览网页历史回退
当你的WebView覆写了URL载入的行为,它会自动地对访问过的网页积累一个历史,你可以利用 goBack() 和 goForward()方法在这个历史中前进或后退。
比如说使用后退键进行网页后退:
/**
* 按键响应,在WebView中查看网页时,按返回键的时候按浏览历史退回,如果不做此项处理则整个WebView返回退出
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
// Check if the key event was the Back button and if there's history
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack())
{
// 返回键退回
myWebView.goBack();
return true;
}
// If it wasn't the Back key or there's no web page history, bubble up
// to the default
// system behavior (probably exit the activity)
return super.onKeyDown(keyCode, event);
}
canGoBack() 方法在网页可以后退时返回true。
类似的,canGoForward()方法可以检查是否有可以前进的历史记录。
如果你不执行这种检查,一旦 goBack() 和 goForward()方法到达历史记录顶端,它们将什么也不做。
如果不加这种设置,在用户按下Back键时,如果是WebView显示网页,则会将WebView作为整体返回。
附上整个代码:
WebView Basic
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
@SuppressLint("SetJavaScriptEnabled")
public class WebActivity extends Activity
{
private WebView myWebView = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web);
// 打开网页
myWebView = (WebView) findViewById(R.id.webview);
//
// myWebView.loadUrl("http://www.cnblogs.com/mengdd/");// 博客链接
myWebView.loadUrl("http://www.baidu.com/");// 百度链接
// JavaScript使能(如果要加载的页面中有JS代码,则必须使能JS)
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
// 在WebView中打开链接(默认行为是使用浏览器,设置此项后都用WebView打开)
// myWebView.setWebViewClient(new WebViewClient());
// 这样设置后所有的链接都会在当前WebView中打开
// 更强的打开链接控制:自己覆写一个WebViewClient类:除了指定链接从WebView打开,其他的链接默认打开
myWebView.setWebViewClient(new MyWebViewClient());
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.activity_web, menu);
return true;
}
/**
* 自定义的WebViewClient类,将特殊链接从WebView打开,其他链接仍然用默认浏览器打开
*
* @author 1
*
*/
private class MyWebViewClient extends WebViewClient
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
if (Uri.parse(url)
.getHost()
.equals("http://www.cnblogs.com/mengdd/archive/2013/02/27/2935811.html")
|| Uri.parse(url).getHost()
.equals("http://music.baidu.com/"))
{
// This is my web site, so do not override; let my WebView load
// the page
// 这是官网上的例子,但是我点击特定链接的时候仍然是用浏览器而不是用自己的WebView打开,加上下面这句view.loadUrl(url)仍然是用浏览器,无解,不知道哪里出了问题
// view.loadUrl(url);
return false;
}
// Otherwise, the link is not for a page on my site, so launch
// another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}
/**
* 按键响应,在WebView中查看网页时,按返回键的时候按浏览历史退回,如果不做此项处理则整个WebView返回退出
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
// Check if the key event was the Back button and if there's history
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack())
{
// 返回键退回
myWebView.goBack();
return true;
}
// If it wasn't the Back key or there's no web page history, bubble up
// to the default
// system behavior (probably exit the activity)
return super.onKeyDown(keyCode, event);
}
}
OK 到此android widget 中的控件写到这里!