Android Widgets

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);
    }
}

     效果:

  

182239_ooql_1177636.png

182239_C2zg_1177636.png

 

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 中的控件写到这里!

转载于:https://my.oschina.net/u/1177636/blog/365254

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值