第三单元 控件
第三单元控件
Button控件
知识点一:如何设置点击事件
(1)方法一:
首先对xml中想要设置点击的控件添加onclick属性
即android onclick=“点击后要进行的函数名”
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
>
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮1"
android:onClick="click"
/>
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮2"
/>
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮3"
/>
</LinearLayout>
然后在java文件里面写点击函数传入参数View表示实体也就是当前操作他的那个控件
创建私有对象变量Button a再在onCreate方法里面用id获取他->目的是:等会儿想在点击函数里写他怎么变
MainActivity.java
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
public class MainActivity extends AppCompatActivity {
private Button a;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
a=findViewById(R.id.button1);
}
public void click(View v){
a.setText("按钮一被点击");
}
}
也可以按哪个Button哪个Button变不一定非要Button1,按照下面这么改
MainActivity.java
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View v){
((Button)v).setText("按钮一被点击");
}
}
这种方法的关键是要导包import android.view.View;
下面两个案例
1.按按钮3变按钮1文字
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
>
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮1"
/>
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮2"
/>
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮3"
android:onClick="click1"
/>
</LinearLayout>
MainActivity.java
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button a;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
a=findViewById(R.id.button1);
}
public void click1(View v){
a.setText("我爱你");
}
}
案例2:点击按钮3变最上面的文字(TextView里)
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
>
<TextView
android:id="@+id/txt1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/love"
/>
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮1"
/>
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮2"
/>
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮3"
android:onClick="click1"
/>
</LinearLayout>
MainActivity.java
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Button a;
private TextView t;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
a=findViewById(R.id.button1);
t=findViewById(R.id.txt1);
}
public void click1(View v){
a.setText("我爱你");
t.setText("qwe");
}
}
第二种方法匿名内部类
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
>
<TextView
android:id="@+id/txt1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/love"
/>
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮1"
android:onClick="click"
/>
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮2"
/>
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮3"
/>
</LinearLayout>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
>
<TextView
android:id="@+id/txt1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/love"
/>
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮1"
android:onClick="click"
/>
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮2"
/>
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮3"
/>
</LinearLayout>
对按钮1实行匿名内部类来实现点击事件
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Button a;
private TextView t;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Button a;
private TextView t;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
a=findViewById(R.id.button1);
a.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {这个函数名onClick不能变
a.setText("I love you!");
}
});
}
}
a.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {这个函数名onClick不能变
a.setText("I love you!");
}
});
}
}
方法3 接口
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button a;
private Button b;
private TextView t;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
a=findViewById(R.id.button1);
t=findViewById(R.id.txt1);
a.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
a.setText("I love you!");
}
});
b=findViewById(R.id.button2);
b.setOnClickListener(this);
}
public void click1(View v){
a.setText("我爱你");
t.setText("qwe");
}
@Override
public void onClick(View v) {
b.setText("WMY");
}
}
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button a;
private Button b;
private TextView t;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
a=findViewById(R.id.button1);
t=findViewById(R.id.txt1);
a.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
a.setText("I love you!");
}
});
b=findViewById(R.id.button2);
b.setOnClickListener(this);
}
public void click1(View v){
a.setText("我爱你");
t.setText("qwe");
}
@Override
public void onClick(View v) {
b.setText("WMY");
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
>
<TextView
android:id="@+id/txt1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/love"
/>
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮1"
android:onClick="click"
/>
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮2"
android:onClick="click2"
/>
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮3"
android:onClick="click1"
/>
</LinearLayout>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
>
<TextView
android:id="@+id/txt1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/love"
/>
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮1"
android:onClick="click"
/>
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮2"
android:onClick="click2"
/>
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮3"
android:onClick="click1"
/>
</LinearLayout>
绿笔是关键,先写
b=findViewById(R.id.button2);
b.setOnClickListener(this);
b.setOnClickListener(this);
然后this变红报错
然后点中this,Alt+Enter弹出这个选第二个实现接口
然后选第一个

最后在Onclick方法里写点击这个Button后你想干的
public void onClick(View v) {
b.setText("WMY");
}
b.setText("WMY");
}
自适应(多语言)
第一步new resource file

第二步local,然后filename取strings

最后选地区ok

然后分别在每个语言的strings.xml下写代码,注意那个没有标语言的是默认strings.xml就是没有选语言默认显示

java文件
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt=findViewById(R.id.txt);
}
public void click001(View v){
txt.setText(R.string.app_name);
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt=findViewById(R.id.txt);
}
public void click001(View v){
txt.setText(R.string.app_name);
//显示strings.xml里greetings里对应那句话
Toast.makeText(MainActivity.this,R.string.greetings,Toast.LENGTH_LONG).show();;
}
}
Toast.makeText(MainActivity.this,R.string.greetings,Toast.LENGTH_LONG).show();;
}
}
语言在设置里选


选完再打开app就是对应该语言下应该显示的(在他自己的strings.xml里设置)
ListView
他是列表有很多记录item组成
首先是主页面布局
下面案例主界面activity_main.xml只放listview
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
></ListView>
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
></ListView>
</RelativeLayout>

然后写记录的布局每条记录布局相似,写item的xml文件这么创建

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:textSize="30sp"
android:id="@+id/goodname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="商品名"
></TextView>
<TextView
android:layout_below="@+id/goodname"
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="价格"
android:textSize="30sp"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:id="@+id/pic"></ImageView>
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:textSize="30sp"
android:id="@+id/goodname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="商品名"
></TextView>
<TextView
android:layout_below="@+id/goodname"
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="价格"
android:textSize="30sp"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:id="@+id/pic"></ImageView>
</RelativeLayout>
最后是最关键的java文件
Mainactivity.java
package com.example.lv;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
//记录内容
//商品名
String []gn={"汉堡","蛋糕","面包","土豆"};
//价格
int []p={10,20,6,7};
//图片的id,图片用id
int []pic={R.drawable.pic01,R.drawable.pic02,R.drawable.pic03,R.drawable.pic04};//用图片资源R.drawable
//listview
ListView listView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=findViewById(R.id.lv);
//商品名
String []gn={"汉堡","蛋糕","面包","土豆"};
//价格
int []p={10,20,6,7};
//图片的id,图片用id
int []pic={R.drawable.pic01,R.drawable.pic02,R.drawable.pic03,R.drawable.pic04};//用图片资源R.drawable
//listview
ListView listView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=findViewById(R.id.lv);
//创建数据适配器,并利用列表的setAdapter方法
Myadapter myadapter=new Myadapter();
listView.setAdapter(myadapter);//listview里面装item需要靠数据适配器
}
//手动创建数据适配器(内部类)
class Myadapter extends BaseAdapter{
@Override
public int getCount() {//记录的数目
return gn.length;
}
@Override
public Object getItem(int position) {//返回记录对象
return gn[position];
}
@Override
public long getItemId(int position) {//返回记录id
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=View.inflate(MainActivity.this,R.layout.item,null);//充气冲出来个view
Myadapter myadapter=new Myadapter();
listView.setAdapter(myadapter);//listview里面装item需要靠数据适配器
}
//手动创建数据适配器(内部类)
class Myadapter extends BaseAdapter{
@Override
public int getCount() {//记录的数目
return gn.length;
}
@Override
public Object getItem(int position) {//返回记录对象
return gn[position];
}
@Override
public long getItemId(int position) {//返回记录id
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=View.inflate(MainActivity.this,R.layout.item,null);//充气冲出来个view
//每一部分先创建再放入内容
TextView gon=findViewById(R.id.goodname);//商品名
TextView pri=findViewById(R.id.price);//价格
ImageView tp=findViewById(R.id.pic);//
gon.setText(gn[position]);图片
//放入这个记录文字,图片内容
pri.setText(p[position]);
tp.setImageResource(pic[position]);//图片处理
return view;
}
}
}
//手写个适配器
TextView gon=findViewById(R.id.goodname);//商品名
TextView pri=findViewById(R.id.price);//价格
ImageView tp=findViewById(R.id.pic);//
gon.setText(gn[position]);图片
//放入这个记录文字,图片内容
pri.setText(p[position]);
tp.setImageResource(pic[position]);//图片处理
return view;
}
}
}
//手写个适配器
改进java程序
利用一个新创的类,借助convertView来实现,减少内存消耗。
package com.example.lv;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
//商品名
String []gn={"汉堡","蛋糕","面包","土豆"};
//价格
int []p={10,20,6,7};
//图片的id
int []pic={R.drawable.pic01,R.drawable.pic02,R.drawable.pic03,R.drawable.pic04};
//listview
ListView listView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=findViewById(R.id.lv);
Myadapter myadapter=new Myadapter();
listView.setAdapter(myadapter);//listview里面装item需要靠数据适配器
}
//手动创建数据适配器
class Myadapter extends BaseAdapter{
@Override
public int getCount() {//记录的数目
return gn.length;
}
@Override
public Object getItem(int position) {//返回记录对象
return gn[position];
}
@Override
public long getItemId(int position) {//返回记录id
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
viewholder vh=new viewholder();
//先判断viewholder是否为空
if(convertView==null){
convertView=View.inflate(MainActivity.this,R.layout.item,null);
vh.gon=convertView.findViewById(R.id.goodname);//商品名
vh.pri=convertView.findViewById(R.id.price);//价格
vh.tp=convertView.findViewById(R.id.pic);//图片
convertView.setTag(vh);
}
else{
vh=(viewholder) convertView.getTag();
}
vh.gon.setText(gn[position]);
vh.pri.setText(p[position]);
vh.tp.setImageResource(pic[position]);
return convertView;
}
}
class viewholder{
TextView gon,pri;
ImageView tp;
}
}
//手写个适配器
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
//商品名
String []gn={"汉堡","蛋糕","面包","土豆"};
//价格
int []p={10,20,6,7};
//图片的id
int []pic={R.drawable.pic01,R.drawable.pic02,R.drawable.pic03,R.drawable.pic04};
//listview
ListView listView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=findViewById(R.id.lv);
Myadapter myadapter=new Myadapter();
listView.setAdapter(myadapter);//listview里面装item需要靠数据适配器
}
//手动创建数据适配器
class Myadapter extends BaseAdapter{
@Override
public int getCount() {//记录的数目
return gn.length;
}
@Override
public Object getItem(int position) {//返回记录对象
return gn[position];
}
@Override
public long getItemId(int position) {//返回记录id
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
viewholder vh=new viewholder();
//先判断viewholder是否为空
if(convertView==null){
convertView=View.inflate(MainActivity.this,R.layout.item,null);
vh.gon=convertView.findViewById(R.id.goodname);//商品名
vh.pri=convertView.findViewById(R.id.price);//价格
vh.tp=convertView.findViewById(R.id.pic);//图片
convertView.setTag(vh);
}
else{
vh=(viewholder) convertView.getTag();
}
vh.gon.setText(gn[position]);
vh.pri.setText(p[position]);
vh.tp.setImageResource(pic[position]);
return convertView;
}
}
class viewholder{
TextView gon,pri;
ImageView tp;
}
}
//手写个适配器

浙公网安备 33010602011771号