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 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一般由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> 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>
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 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)是一个每次只能选择所有项中一项的部件。它的项来自于与之相关联的适配器中。
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是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 中的控件写到这里!