android学习第三课(组件)

本文详细介绍了Android开发中常用的UI控件,包括TextView、EditText、Button等的基本使用方法及属性设置,适合初学者快速掌握基本控件的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、TextView/EditView

知识点说明

/**textview 文本框 展示
* 1.文本字体的大小textSize(sp)
* 2.autoLink:none(默认),web(Linkify.WEB_URLS)
*    email,phone,map,all(包括web|email|phone|map)
* 3.ellipsize:设置缺省属性 none(默认),start(省略头部),middle,end marquee
* 4.password="true"设置改文本为密码输入框
* 5.backgroup 带边框的 
* 6.phoneNumber=true
* 
* editview 输入框 操作
* 继承textview 
* */

二、Button

知识点说明

/**
		 * button --生成按钮上的文字
		 * ImageButton--生产带图片的按钮 即使设置了text也不会显示
		 * xx.9.png--用来优化android资源的小图片
		 * 被拉伸却不失真
		 * 9png图片打包后会减小2个像素
		 * 制作9png --在android/tools/draw9patch.bat
		 * */

代码演示

<TableLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:orientation="horizontal"
  android:layout_height="match_parent">
  <TableRow>
<!-- 普通文字按钮 -->	
<Button
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:background="@drawable/red1"
	android:text="普通按钮"
	android:textSize="10pt"
/>
<!-- 普通图片按钮 -->
<ImageButton
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:src="@drawable/red1"
	android:background="#000000"
/>
</TableRow>
<TableRow>
<!-- 按下时显示不同图片的按钮 -->
<ImageButton
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:src="@drawable/button_selector"
	android:background="#000000"
/>
<!-- 带文字的图片按钮-->
<Button
	android:id="@+id/test"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:background="@drawable/button_selector"
	android:text="带文字的图片按钮"
/>
</TableRow>

<TableRow>
<!-- 普通图片 -->
<Button
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:id="@+id/btc"
/>
<!-- 9Patch图片 -->
<Button
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:id="@+id/bt9"
/>

</TableRow>

</TableLayout>

super.onCreate(savedInstanceState);
		setContentView(R.layout.button);
		private Button bt9;
		private Button btc;
		bt9 = (Button) findViewById(R.id.bt9);
		btc = (Button) findViewById(R.id.btc);
		// button.setBackgroundDrawable(getResource.getDrawable(xxx))
		//9png设置背景貌似只能通过此方法,否则会不起作用
		bt9.setBackgroundDrawable(getResources().getDrawable(R.drawable.lbjn));
		btc.setBackgroundDrawable(getResources().getDrawable(R.drawable.lbjnc));

效果图

.

关于9png
打开draw9patch.bat-->show bad patches 就可以画出自己要设计的png了。


这里找了张图片,说明下
1号黑色条位置向下覆盖的区域表示图片横向拉伸时,只拉伸该区域 
                        2号黑色条位置向右覆盖的区域表示图片纵向拉伸时,只拉伸该区域   
                        3号黑色条位置向左覆盖的区域表示图片纵向显示内容的区域 
                        4号黑色条位置向上覆盖的区域表示图片横向显示内容的区域 
                        没有黑色条的位置覆盖的区域是图片拉伸时保持不变(比如,如果图片的四角为弧形的时候,当图片被任意拉伸时,四角的弧形都不会发生改变)
         5、如果失误多选了部分,可按住shift键,点击鼠标左键去掉黑色条 
         6、右边3个黑色图形区域为显示当前拉伸效果 
         7、选择好区域后,点击左上file-》save 9-path,保存图片,后缀名为xxx.9.png

实际开发中,一般是一对出现的,也就是14一对(当我们需要拉伸图片的横向),23一对(当我们需要拉伸图片的纵向)

三、单选/复选框

知识点

单选框 RadioButton需要嵌套在一个RadioGroup中,通过isChecked来判断是否组件有被选中
复选框checkbox则不需要如此。直接上代码,没什么好说的。

代码

<RadioGroup android:id="@+id/radionGroup"
		android:layout_width="fill_parent" android:layout_height="fill_parent"
		android:orientation="horizontal">
		<RadioButton android:id="@+id/radioFemale"
			android:layout_width="wrap_content" android:layout_height="wrap_content"
			android:text="女" />

		<RadioButton android:id="@+id/radioMale"
			android:layout_width="wrap_content" android:layout_height="wrap_content"
			android:text="男" android:checked="true" />
		<Button android:id="@+id/ok" android:layout_width="wrap_content"
			android:layout_height="wrap_content" android:text="确定" />
	</RadioGroup>

ok.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				String result="你选择的是:";
				if(radioFemale.isChecked()){
					setTitle(result+"女");
				}else{
					setTitle(result+"男");
				}
			}
		});

checkbox

	<CheckBox android:id="@+id/plain_cb" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:text="AA" />

	<CheckBox android:id="@+id/serif_cb" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:text="BB" />

	<CheckBox android:id="@+id/bold_cb" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:text="CC" />

	<CheckBox android:id="@+id/italic_cb" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:text="DD" />
	<Button android:id="@+id/button1" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:text="获取checkbox" />

button1.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				String result="";
				if(plainCB.isChecked()){
					result+=plainCB.getText()+"、";
				}
				if(serifCB.isChecked()){
					result+=serifCB.getText()+"、";
				}
				if(boldCB.isChecked()){
					result+=boldCB.getText()+"、";
				}
				if(italicCB.isChecked()){
					result+=italicCB.getText()+"、";
				}
				if(!"".equals(result)){
					result=result.substring(0,result.length()-1);
				}else{
					result="你没有选择!!!";
				}
				setTitle("Checked:"+result);
			}
		});


四、状态开关按钮(toggleButton)

知识点

	checked-->setChecked
	textOff-->非选中的值
	textOn-->选中的值

<TextView android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:text="是否是码农:"></TextView>
	<ToggleButton android:textOn="是" android:textOff="否"
		android:checked="true" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:id="@+id/toggleBt">
		
	</ToggleButton>

checked=ture表示默认选则textOn
toggleBt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

			@Override
			public void onCheckedChanged(CompoundButton buttonView,
					boolean isChecked) {
				// TODO Auto-generated method stub
				String toggleText = toggleBt.getText().toString();// 获得触发前的text
				if (isChecked) {//当选中的时候触发

					setTitle("我是码农");
				} else {
					setTitle("我不是码农");
				}

			}
		});

五、时钟(DlalogClock/DigitalClock)


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" android:layout_height="fill_parent"
	android:orientation="vertical" android:gravity="center_horizontal">
	<!-- 模拟时钟 -->
	<AnalogClock android:layout_width="fill_parent"
		android:layout_height="wrap_content"></AnalogClock>

	<!-- 数字时钟 继承 textview -->
	<DigitalClock android:layout_width="fill_parent"
		android:gravity="center_horizontal" android:layout_height="wrap_content"
		android:textSize="14pt">

	</DigitalClock>

</LinearLayout>


关于计时器chronometer

<!-- 计时器 -->
	<Chronometer
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:id="@+id/chronometer"
	
	></Chronometer>
	
	<Button
		android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:id="@+id/chBt"
	android:text="开始计时"
	></Button>

chronometer=(Chronometer) findViewById(R.id.chronometer);
		chBt=(Button) findViewById(R.id.chBt);
		chBt.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				chronometer.setBase(SystemClock.elapsedRealtime());
				chronometer.start();
			}
		});
		
		chronometer.setOnChronometerTickListener( new Chronometer.OnChronometerTickListener() {
			
			@Override
			public void onChronometerTick(Chronometer chronometer) {
				// TODO Auto-generated method stub
				if(SystemClock.elapsedRealtime()-chronometer.getBase()>10*1000){
					chronometer.stop();//当运行10秒后停止
				}
			}
		});

六、图像ImageView


知识点

ImageView类可以加载各种来源的图片(如资源或图片库),需要计算图像的尺寸,比便它可以在其他布局中使用,并提供例如缩放和着色
附:更详细的scaleType说明:
CENTER /center 在视图中心显示图片,并且不缩放图片
CENTER_CROP / centerCrop 按比例缩放图片,使得图片长 (宽)的大于等于视图的相应维度
CENTER_INSIDE / centerInside 按比例缩放图片,使得图片长 (宽)的小于等于视图的相应维度
FIT_CENTER / fitCenter 按比例缩放图片到视图的最小边,居中显示
FIT_END / fitEnd 按比例缩放图片到视图的最小边,显示在视图的下部分位置
FIT_START / fitStart 把图片按比例扩大/缩小到视图的最小边,显示在视图的上部分位置
FIT_XY / fitXY 把图片不按比例缩放到视图的大小显示
MATRIX / matrix 用矩阵来绘制
更多参考:农民伯伯

 <ImageView android:id="@+id/imageView1" 
    android:src="@drawable/upan"
    android:scaleType="centerInside"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:background="@drawable/imageview_bg"
    />


imageView1 = (ImageView) findViewById(R.id.imageView1);
		imageView1.setOnTouchListener(new View.OnTouchListener() {

			@Override
			public boolean onTouch(View v, MotionEvent event) {
				BitmapDrawable drawable = (BitmapDrawable) imageView1
						.getDrawable();
				if (!drawable.getBitmap().isRecycled()) {
					drawable.getBitmap().recycle();// 回收资源

				}
				imageView1.setImageBitmap(BitmapFactory.decodeResource(
						getResources(), R.drawable.bg));
				imageView1.setScaleType(ScaleType.FIT_CENTER);

				return false;
			}
		});

七、自动完成(AutoCompleteTextView)




<AutoCompleteTextView android:id="@+id/auto_complete"
		android:layout_width="200px" android:layout_height="wrap_content"
		android:layout_x="23px" android:layout_y="98px" android:textSize="18px" />

static final String[] COUNTRIES = new String[] {
		"China" ,"Russia", "Germany",
		"Ukraine", "Belarus", "USA" ,"China1" ,"China12", "Germany",
		"Russia2", "Belarus", "USA" ,"UAA","UBC","UBB","CCC","BBB","广州1","广州2","广州3","广州4","广东1","广东2","广东3",
	    };
autoComplete=(AutoCompleteTextView)findViewById(R.id.auto_complete);
cleanButton=(Button)findViewById(R.id.cleanButton);

ArrayAdapter<String> adapter=new ArrayAdapter<String>(AutoCompleteTextViewActivity.this,android.R.layout.simple_dropdown_item_1line,COUNTRIES);
autoComplete.setAdapter(adapter);

//清空
cleanButton.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		autoComplete.setText("");
	}
});


八、下拉框(Spinner)


<Spinner android:id="@+id/spinner1" android:layout_width="150dip"
		android:layout_height="wrap_content" android:drawSelectorOnTop="false" />

赋值一
android:entries


赋值二

private String[] mCounties={"beijing","guangdong","guangxi","hunan"};
private List<String> allCounties=new ArrayList<String>();
for(int i=0;i<mCounties.length;i++){
			allCounties.add(mCounties[i]);
		}
countiesAdapter=new ArrayAdapter<String>(SpinnerActivity.this,android.R.layout.simple_spinner_item,allCounties);
		countiesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		spinner1.setAdapter(countiesAdapter);

赋值三

ArrayAdapter adapter=ArrayAdapter.createFromResource(SpinnerActivity.this,R.array.counties,android.R.layout.simple_spinner_item);
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		spinner1.setAdapter(adapter);


arryas.xml
<resources>
	<string-array name="counties">
		<item>AAA</item>
		<item>BBB</item>
		<item>CCC</item>
		<item>DDD</item>
		<item>EEE</item>
	</string-array>
</resources>

跟很多控件一样,可以自定义baseAdapter,来自定义spinner,有兴趣的朋友可以先自行研究。

九、日期/时间选择器(DatePicker/TimePicker)


<DatePicker android:id="@+id/datePicker1"
		android:layout_width="wrap_content" android:layout_height="wrap_content" />

	<TimePicker android:id="@+id/timePicker1"
		android:layout_width="wrap_content" android:layout_height="wrap_content" />


//int year =c.get(Calendar.YEAR);//建议通过此种方式获取
		datePicker1=(DatePicker)findViewById(R.id.datePicker1);
		timePicker1=(TimePicker)findViewById(R.id.timePicker1);
		datePickerButton=(Button)findViewById(R.id.datePickerButton1);

		datePicker1.init(year,month,day, null);
		/**
		datePicker1.init(year, month, day, new DatePicker.OnDateChangedListener() {
			
			@Override
			public void onDateChanged(DatePicker view, int year, int monthOfYear,
					int dayOfMonth) {
			
				//DatePickerActivity.this.year=year;
			}
		});
*/
timePicker1.setCurrentHour(hour);timePicker1.setCurrentMinute(minute);timePicker1.setIs24HourView(true);datePickerButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {setTitle("你选择的是:"+datePicker1.getYear()+"年"+datePicker1.getMonth()+"月"+datePicker1.getDayOfMonth()+"日 "+timePicker1.getCurrentHour()+"小时"+timePicker1.getCurrentMinute()+"分");}});


  
  





十、进度条(ProgressBar)


研究进度条浪费了很多时间,主要是布局出现了问题,button按钮居然显示不出来,不废话,大局为重

找到问题了,
layout_height改成wrap_content 去掉代码中屏蔽的就OK了这里就不修改了



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="match_parent" android:layout_height="match_parent"
	android:orientation="vertical">
	<LinearLayout android:layout_width="match_parent"
		android:layout_height="match_parent">
		<ProgressBar android:layout_width="200dip" android:id="@+id/pro1"
			android:layout_height="wrap_content" android:max="100"
			style="?android:attr/progressBarStyleHorizontal" android:progress="0"
			android:secondaryProgress="20" android:visibility="gone"></ProgressBar>
		<TextView android:layout_width="wrap_content"
			android:layout_height="wrap_content" android:id="@+id/ptext"></TextView>
	</LinearLayout>
	<LinearLayout android:layout_width="match_parent"
		android:layout_height="match_parent">
		<Button android:layout_width="wrap_content"
			android:layout_height="wrap_content" android:id="@+id/pstart"
			android:text="启动"></Button>
	</LinearLayout>
</LinearLayout>


pro1.setVisibility(View.VISIBLE);

		final Handler handler = new Handler() {

			@Override
			public void handleMessage(Message msg) {

				if (msg.what == 0x101) {
					pro1.setProgress(count);
					pro1.setSecondaryProgress(count + 10);// 这里设置的作用是可以看到下一个滚动的值
					ptext.setText(count + "%");
				}
				super.handleMessage(msg);
			}
		};

		// pstart.setOnClickListener(new OnClickListener() {

		// @Override
		// public void onClick(View v) {
		// TODO Auto-generated method stub

		new Thread() {
			@Override
			public void run() {
				// Message msg=new Message();//不能放在这里 否则有异常 This message is
				// already in use.

				while (count < 100) {
					count += 10;
					Message msg = new Message();
					msg.what = 0x101;
					handler.sendMessage(msg);
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}

				}

			}
		}.start();
		// }
		// });

	}





这里只是简单介绍了下进度条,主要的配置都在xml中去完成了,更多待续吧。继续继续


十一、拖动条(SeekBar)


<ImageView android:layout_width="match_parent"
		android:layout_height="wrap_content" android:id="@+id/simage"
		android:src="@drawable/imageview_bg"></ImageView>
	<SeekBar android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:id="@+id/seekbar1"
		android:max="255" android:progress="255" android:thumb="@drawable/seekbar_thumb"></SeekBar>



seekbar1 = (SeekBar) findViewById(R.id.seekbar1);
		simage = (ImageView) findViewById(R.id.simage);
		seekbar1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
			@Override
			public void onStopTrackingTouch(SeekBar seekBar) {
			}
			@Override
			public void onStartTrackingTouch(SeekBar seekBar) {
			}
			@Override
			public void onProgressChanged(SeekBar seekBar, int progress,
					boolean fromUser) {
				simage.setAlpha(progress);

			}
		});


十二、星级评分条(RatingBar)


<RatingBar android:id="@+id/rating_bar"
			android:layout_width="wrap_content" android:layout_height="wrap_content"
			ratingBarStyleSmall="true" />

		<TextView android:layout_width="wrap_content"
			android:layout_height="wrap_content" android:text="展现图片" />

		<ImageView android:id="@+id/imageView" android:src="@drawable/nobody"
			android:layout_width="wrap_content" android:layout_height="wrap_content" />

ratingBar=(RatingBar)findViewById(R.id.rating_bar);
		imageView=(ImageView)findViewById(R.id.imageView);
		ratingBar.setMax(255);//设置最大值
		ratingBar.setStepSize(0.5f);//设置每次点击最小点半颗星 默认也是05.f
		ratingBar.setProgress(0);//设置当前不选中星星
		ratingBar.setNumStars(5);//设置展示几颗星
		ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
			
			@Override
			public void onRatingChanged(RatingBar ratingBar, float rating,
					boolean fromUser) {
				imageView.setAlpha((int)rating*255/5);
				
			}
		});



其他组件,如tabhost,listview对话框等都是比较重要并且内容比较多,所以就不再这里描述,另开一篇。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值