继续…
(2-7)ImageView
1.常用属性
scaleType
- fitXY:填满控件,宽高比可能会发生改变
- fitCenter:保持宽高比缩放,直至能够完全显示
- centerCrop:保持宽高比缩放,直至能够完全填满控件,会发生裁剪
2.加载网络图片
需要利用Activity里的代码来实现,同时需要用到github库里的glide.jar包
具体下载方法,自行百度
然后代码如下:
mIv4 = findViewById(R.id.iv_4);
Glide.with(this).load("https://www.baidu.com/img/bd_logo1.png?where=super").into(mIv4);
load()里面写任意图片的url,由于用到了网络连接,所以需要在AndroidManifest.xml里添加访问网络的权限
<uses-permission android:name="android.permission.INTERNET"/>
效果如下:
(2-8)ListView
2.Adapter接口
首先来了解手动建立Activity和布局文件,在listview包里创建ListViewActivity.java文件,之后在AndroidManifest.xml中声明
<activity android:name=".listview.ListViewActivity"></activity>
然后再创建ListViewActivity的布局文件,activity_listview.xml,在该文件里面添加ListView控件
回到ListViewActivity文件
private ListView mLv1;
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listview);
mLv1 = findViewById(R.id.lv_1);
mLv1.setAdapter(); //Adapter是连接后端数据和前端显示的适配器接口
}
再创建一个MyListAdapter文件,用来实现Adapter接口的方法,其中有
public int getCount();
public Object getItem(int position);
public long getItemId(int position);
//采用了优化模式,通过convertView+ViewHolder来实现,ViewHolder就是一个静态类,使用 ViewHolder 的关键好处是缓存了显示数据的视图(View),加快了 UI 的响应速度。
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder holder = null;
if (convertView == null) {
convertView = mLayoutInflater.inflate(R.layout.layout_list_item, null);
holder = new ViewHolder();
holder.imageView = convertView.findViewById(R.id.iv);
holder.tvTitle = convertView.findViewById(R.id.tv_title);
holder.tvTime = convertView.findViewById(R.id.tv_time);
holder.tvContent = convertView.findViewById(R.id.tv_content);
convertView.setTag(holder); //setTag把查找的view缓存起来方便多次重用
}else {
holder = (ViewHolder) convertView.getTag();
}
//给控件赋值,直接通过holder获取下面三个子控件,不必使用findviewbyid,加快了 UI 的响应速度
holder.tvTitle.setText("这是标题");
holder.tvTime.setText("2088-08-08");
holder.tvContent.setText("这是内容");
Glide.with(mContext).load("https://www.baidu.com/img/bd_logo1.png?where=super").into(holder.imageView);
return convertView;
}
//创建一个静态ViewHolder类,ViewHolder模式通过getView()方法返回的视图的标签(Tag)中存储一个数据结构,这个数据结构包含了指向我们要绑定数据的视图的引用,从而避免每次调用getView()的时候调用findViewById())
static class ViewHolder{
public ImageView imageView;
public TextView tvTitle,tvTime,tvContent;
}
ListView控件也可以实现按压变色,通过添加selector实现
- state_focused:是否处于聚焦(获取焦点)状态,一个窗口只能有一个视图获得焦点,一般由用户交互导致,无需应用程序直接改变
- state_pressed:是否处于被按下状态,由用户导致(触摸操作)
- state_selected:是否处于被选择状态,程序可调用setSelected()改变其状态
(2-9)GridView
extends AppCompatActivity //会默认添加标题栏,是Activity的子类
extends Activity
1.常用属性
android:numColumns="3" //用于设置一行显示多少item
android:horizontalSpacing="10dp" //设置item之间的水平间距
android:verticalSpacing="10dp" //设置item之间的垂直间距
2.Adapter接口
同上面ListView的一样,通过convertView+ViewHolder来实现
3.点击事件
private GridView mGv;
mGv = findViewById(R.id.gv);
mGv.setAdapter(new MyGridViewAdapter(GrideViewActivity.this));
//设置点击事件监听器
mGv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(GrideViewActivity.this, "点击 pos"+position,Toast.LENGTH_SHORT).show();
}
});
//设置长按事件监听器
mGv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(GrideViewActivity.this, "长按 pos"+position, Toast.LENGTH_SHORT).show();
return true;
}
});
注意长按事件监听器里的返回值为true,表示长按监听只执行长按监听中执行的代码,若为false,还会继续响应其他监听中的事件。
为false时,比如你长按pos=0的item,先提示"长按 pos0",当你松开后,继续提示"点击 pos0",
为true时,长按时会提示"长按 pos0",松开时并不会提示其他事件监听器的消息
(2-10) 滚动视图ScrollView & HorizontalScrollView
1.垂直滚动视图ScrollView
使用方法如下:其子控件只能是一个
<ScrollView
<
<>
<>
<>
>
</ScrollView>
2.水平滚动视图HorizontalScrollView
同ScrollView一样