最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開發(fā)之自定義控件用法詳解

 更新時(shí)間:2016年08月12日 11:49:53   作者:wop_niaoren19870227  
這篇文章主要介紹了Android開發(fā)之自定義控件用法,結(jié)合實(shí)例形式分析了Android自定義控件的具體功能、定義與使用方法,需要的朋友可以參考下

本文實(shí)例講述了Android開發(fā)之自定義控件用法。分享給大家供大家參考,具體如下:

今天和大家分享下組合控件的使用。很多時(shí)候android自定義控件并不能滿足需求,如何做呢?很多方法,可以自己繪制一個(gè),可以通過繼承基礎(chǔ)控件來重寫某些環(huán)節(jié),當(dāng)然也可以將控件組合成一個(gè)新控件,這也是最方便的一個(gè)方法。今天就來介紹下如何使用組合控件,將通過兩個(gè)實(shí)例來介紹。

第一個(gè)實(shí)現(xiàn)一個(gè)帶圖片和文字的按鈕,如圖所示:

整個(gè)過程可以分四步走。第一步,定義一個(gè)layout,實(shí)現(xiàn)按鈕內(nèi)部的布局。代碼如下:

custom_button.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
 <ImageView
 android:id="@+id/iv"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center_vertical"
   android:paddingLeft="10.0dip"
   android:paddingTop="10.0dip"
   android:paddingBottom="10.0dip"
   />
 <TextView
 android:id="@+id/tv"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:textColor="#ffffff"
   android:layout_marginLeft="8dip"
   android:layout_gravity="center_vertical"
   android:paddingLeft="5.0dip"
   android:paddingTop="10.0dip"
   android:paddingBottom="10.0dip"
   android:paddingRight="10.0dip"
   android:textSize="18.0sp"
   />
</LinearLayout>

這個(gè)xml實(shí)現(xiàn)一個(gè)左圖右字的布局,接下來寫一個(gè)類繼承LinearLayout,導(dǎo)入剛剛的布局,并且設(shè)置需要的方法,從而使的能在代碼中控制這個(gè)自定義控件內(nèi)容的顯示。代碼如下:

CustomButton.java

package com.szy.customview;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class CustomButton extends LinearLayout
{
 private ImageView iv;
 private TextView tv;
 public CustomButton(Context context)
 {
 this(context, null);
 }
 public CustomButton(Context context, AttributeSet attrs)
 {
 super(context, attrs);
 // 導(dǎo)入布局
 LayoutInflater.from(context).inflate(R.layout.custom_button, this, true);
 iv = (ImageView) findViewById(R.id.iv);
 tv = (TextView) findViewById(R.id.tv);
 }
 /**
 * 設(shè)置圖片資源
 */
 public void setImageResource(int resId)
 {
 iv.setImageResource(resId);
 }
 /**
 * 設(shè)置顯示的文字
 */
 public void setTextViewText(String text)
 {
 tv.setText(text);
 }
}

第三步,在需要使用這個(gè)自定義控件的layout中加入這控件,只需要在xml中加入即可。方法如下:

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical"
 >
 <com.szy.customview.CustomButton
   android:id="@+id/bt_confirm"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:background="@drawable/button_bg"
   />
 <com.szy.customview.CustomButton
   android:id="@+id/bt_cancel"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:background="@drawable/button_bg"
  />
</LinearLayout>

注意的是,控件標(biāo)簽使用完整的類名即可。為了給按鈕一個(gè)點(diǎn)擊效果,你需要給他一個(gè)selector背景,這里就不說了。

最后一步,即在activity中設(shè)置該控件的內(nèi)容。當(dāng)然,在xml中也可以設(shè)置,但是只能設(shè)置一個(gè),當(dāng)我們需要兩次使用這樣的控件,并且顯示內(nèi)容不同時(shí)就不行了。在activity中設(shè)置也非常簡單,我們在CustomButton這個(gè)類中已經(jīng)寫好了相應(yīng)的方法,簡單調(diào)用即可。代碼如下:

package com.szy.customview;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
public class MainActivity extends Activity
{
 private CustomButton btnConfirm;
 private CustomButton btnCancel;
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 btnConfirm = (CustomButton) findViewById(R.id.bt_confirm);
 btnCancel = (CustomButton) findViewById(R.id.bt_cancel);
 btnConfirm.setTextViewText("確定");
 btnConfirm.setImageResource(R.drawable.confirm);
 btnCancel.setTextViewText("取消");
 btnCancel.setImageResource(R.drawable.cancel);
 btnConfirm.setOnClickListener(new OnClickListener()
 {
  @Override
  public void onClick(View v)
  {
  // 在這里可以實(shí)現(xiàn)點(diǎn)擊事件
  }
 });
 }
}

這樣,一個(gè)帶文字和圖片的組合按鈕控件就完成了。這樣梳理一下,使用還是非常簡單的。組合控件能做的事還非常多,主要是在類似上例中的CustomButton類中寫好要使用的方法即可。

再來看一個(gè)組合控件,帶刪除按鈕的EidtText。即在用戶輸入后,會出現(xiàn)刪除按鈕,點(diǎn)擊即可取消用戶輸入。

定義方法和上例一樣。首先寫一個(gè)自定義控件的布局:

custom_editview.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
 <EditText
   android:id="@+id/et"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:singleLine="true"
   />
 <ImageButton
   android:id="@+id/ib"
   android:visibility="gone"
   android:src="@drawable/cancel"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:background="#00000000"
   android:layout_alignRight="@+id/et" />
</RelativeLayout>

實(shí)現(xiàn)輸入框右側(cè)帶按鈕效果,注意將按鈕隱藏。然后寫一個(gè)CustomEditView類,實(shí)現(xiàn)刪除用戶輸入功能。這里用到了TextWatch這個(gè)接口,監(jiān)聽輸入框中的文字變化。使用也很簡單,實(shí)現(xiàn)他的三個(gè)方法即可??创a:

CustomEditView.java

package com.szy.customview;
import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
public class CustomEditView extends LinearLayout implements EdtInterface
{
 ImageButton ib;
 EditText et;
 public CustomEditView(Context context)
 {
 super(context);
 }
 public CustomEditView(Context context, AttributeSet attrs)
 {
 super(context, attrs);
 LayoutInflater.from(context).inflate(R.layout.custom_editview, this, true);
 init();
 }
 private void init()
 {
 ib = (ImageButton) findViewById(R.id.ib);
 et = (EditText) findViewById(R.id.et);
 et.addTextChangedListener(tw);// 為輸入框綁定一個(gè)監(jiān)聽文字變化的監(jiān)聽器
 // 添加按鈕點(diǎn)擊事件
 ib.setOnClickListener(new OnClickListener()
 {
  @Override
  public void onClick(View v)
  {
  hideBtn();// 隱藏按鈕
  et.setText("");// 設(shè)置輸入框內(nèi)容為空
  }
 });
 }
 // 當(dāng)輸入框狀態(tài)改變時(shí),會調(diào)用相應(yīng)的方法
 TextWatcher tw = new TextWatcher()
 {
 @Override
 public void onTextChanged(CharSequence s, int start, int before, int count)
 {
  // TODO Auto-generated method stub
 }
 @Override
 public void beforeTextChanged(CharSequence s, int start, int count, int after)
 {
  // TODO Auto-generated method stub
 }
 // 在文字改變后調(diào)用
 @Override
 public void afterTextChanged(Editable s)
 {
  if (s.length() == 0)
  {
  hideBtn();// 隱藏按鈕
  } else
  {
  showBtn();// 顯示按鈕
  }
 }
 };
 @Override
 public void hideBtn()
 {
 // 設(shè)置按鈕不可見
 if (ib.isShown())
  ib.setVisibility(View.GONE);
 }
 @Override
 public void showBtn()
 {
 // 設(shè)置按鈕可見
 if (!ib.isShown())
 {
  ib.setVisibility(View.VISIBLE);
 }
 }
}
interface EdtInterface
{
 public void hideBtn();
 public void showBtn();
}

在TextWatch接口的afterTextChanged方法中對文字進(jìn)行判斷,若長度為0,就隱藏按鈕,否則,顯示按鈕。

另外,實(shí)現(xiàn)ImageButton(即那個(gè)叉)的點(diǎn)擊事件,刪除輸入框中的內(nèi)容,并隱藏按鈕。

后面兩步的實(shí)現(xiàn)就是加入到實(shí)際布局中:

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical"
 >
 <com.szy.customview.CustomEditView
 android:layout_width="fill_parent"
   android:layout_height="wrap_content"
  />
</LinearLayout>

最后顯示效果如圖:

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android控件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android操作SQLite數(shù)據(jù)庫技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android數(shù)據(jù)庫操作技巧總結(jié)》、《Android文件操作技巧匯總》、《Android編程開發(fā)之SD卡操作方法匯總》、《Android開發(fā)入門與進(jìn)階教程》及《Android資源操作技巧匯總

希望本文所述對大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評論

遂平县| 淅川县| 长顺县| 乡城县| 呼和浩特市| 南和县| 天等县| 兰溪市| 策勒县| 阿拉善左旗| 金门县| 黔西| 金华市| 临湘市| 延吉市| 敦煌市| 鸡东县| 许昌市| 宜昌市| 盐津县| 易门县| 古浪县| 东莞市| 莆田市| 青浦区| 泸定县| 鹤壁市| 哈尔滨市| 鄂托克前旗| 甘肃省| 赤水市| 新竹市| 泸西县| 高密市| 阿拉善盟| 遂川县| 临夏县| 富民县| 毕节市| 金门县| 赤水市|