继续…
(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() {@Overridepublic 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() {@Overridepublic 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一样