2024年最全Android中圆角列表ListView(1),2024年最新微信公众号内嵌h5页面

最后

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。

最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【算法合集】

【延伸Android必备知识点】

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

如果是底部最后一项,则下面两个角为圆角,app_list_corner_round_bottom.xml定义如下:

?

1
2
3
4
5
6
7
8
<? xml version = "1.0" encoding = "utf-8" ?>
< shape xmlns:android = "http://schemas.android.com/apk/res/android" >
< gradient android:startColor = "#B5E7B8"
android:endColor = "#76D37B"
android:angle = "270" />
< corners android:bottomLeftRadius = "4dip"
android:bottomRightRadius = "4dip" />
</ shape >

如果是中间项,则应该不需要圆角, app_list_corner_shape.xml定义如下:

?

1
2
3
4
5
6
<? xml version = "1.0" encoding = "utf-8" ?>
< shape xmlns:android = "http://schemas.android.com/apk/res/android" >
< gradient android:startColor = "#B5E7B8"
android:endColor = "#76D37B"
android:angle = "270" />
</ shape >

4.背景图片

因为默认的情况下,ListView就要显示一个圆角的边框,这个我们使用一张9patch背景图片来实现app_list_corner_border.9.png:

在这里提示一下,做9patch背景图片的时候,记得把内容区域定义为边框线以内的区域。

5. 初步实现

参考前面提供的素材和核心代码,我们初步实现如下:

(1).自定义CornerListView.java:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
* 圆角ListView
*/
public class CornerListView extends ListView {
public CornerListView(Context context) {
super (context);
}
public CornerListView(Context context, AttributeSet attrs, int defStyle) {
super (context, attrs, defStyle);
}
public CornerListView(Context context, AttributeSet attrs) {
super (context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
int x = ( int ) ev.getX();
int y = ( int ) ev.getY();
int itemnum = pointToPosition(x, y);
if (itemnum == AdapterView.INVALID_POSITION)
break ;
else
{
if (itemnum== 0 ){
if (itemnum==(getAdapter().getCount()- 1 )){
setSelector(R.drawable.app_list_corner_round);
} else {
setSelector(R.drawable.app_list_corner_round_top);
}
} else if (itemnum==(getAdapter().getCount()- 1 ))
setSelector(R.drawable.app_list_corner_round_bottom);
else {
setSelector(R.drawable.app_list_corner_shape);
}
}
break ;
case MotionEvent.ACTION_UP:
break ;
}
return super .onInterceptTouchEvent(ev);
}
}

这个CornerListView主要处理了点击项的选择器的切换。

(2).列表布局文件和列表项布局文件:

列表布局文件main_tab_setting.xml:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
<? xml version = "1.0" encoding = "utf-8" ?>
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:orientation = "vertical"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent" >
< com.tianxia.app.floworld.view.CornerListView android:id = "@+id/setting_list"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_margin = "10dip"
android:background = "@drawable/app_list_corner_border"
android:cacheColorHint = "#00000000" >
</ com.tianxia.app.floworld.view.CornerListView >
</ LinearLayout >

列表项布局文件main_tab_setting_list_item.xml:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<? 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" >
< ImageView android:id = "@+id/setting_list_item_arrow"
android:layout_alignParentRight = "true"
android:layout_centerVertical = "true"
android:layout_width = "wrap_content"
android:layout_height = "fill_parent"
android:layout_marginLeft = "15dip"
android:layout_marginRight = "15dip"
android:src = "@drawable/appreciate_tab_list_item_arrow_small" />
< TextView android:id = "@+id/setting_list_item_text"
android:layout_toLeftOf = "@id/setting_list_item_arrow"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:textSize = "16dip"
android:textColor = "#000000"
android:paddingTop = "10dip"
android:paddingBottom = "10dip"
android:paddingLeft = "10dip" />
</ RelativeLayout >

(3)界面实现

显示界面SettingTabActivity.java:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class SettingTabActivity extends Activity{
private CornerListView cornerListView = null ;
private List<Map<String,String>> listData = null ;
private SimpleAdapter adapter = null ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.main_tab_setting);
cornerListView = (CornerListView)findViewById(R.id.setting_list);
setListData();
adapter = new SimpleAdapter(getApplicationContext(), listData, R.layout.main_tab_setting_list_item , new String[]{ "text" }, new int []{R.id.setting_list_item_text});
cornerListView.setAdapter(adapter);
}
/**
* 设置列表数据
*/
private void setListData(){
listData = new ArrayList<Map<String,String>>();
Map<String,String> map = new HashMap<String, String>();
map.put( "text" , "图库更新" );
listData.add(map);
map = new HashMap<String, String>();
map.put( "text" , "收藏图片" );
listData.add(map);
map = new HashMap<String, String>();
map.put( "text" , "下载目录" );
listData.add(map);
}
}
_**(4).效果图**_ 通过以上实现,我们基本达到了圆角的ListView的效果: ![](https://img-blog.csdnimg.cn/img_convert/9d76b64470e6fa6f227bf0ce21a7439a.png)![](https://img-blog.csdnimg.cn/img_convert/50af0259c3da98e8b4740d3b7b381142.png)![](https://img-blog.csdnimg.cn/img_convert/ba029d1aa06f8cbbebde56cd26f9fbdc.png)
小福利:

在当下这个碎片化信息环境的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021大厂最新Android面试真题解析

Android大厂面试真题解析

各个模块学习视频:如数据结构与算法

算法与数据结构资料图

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。
一线互联网架构师

这份体系学习笔记,适应人群:**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!点赞+评论即可获得!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的Android使用ListView模拟微信好友功能的代码示例: Friend.java(好友数据模型类): ```java public class Friend { private int avatarId; private String nickname; private String remark; public Friend(int avatarId, String nickname, String remark) { this.avatarId = avatarId; this.nickname = nickname; this.remark = remark; } public int getAvatarId() { return avatarId; } public void setAvatarId(int avatarId) { this.avatarId = avatarId; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } } ``` friend_item.xml(好友列表项布局文件): ```xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="80dp" android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingTop="8dp" android:paddingBottom="8dp" android:background="@android:color/white"> <ImageView android:id="@+id/avatar" android:layout_width="60dp" android:layout_height="60dp" android:layout_alignParentLeft="true"/> <TextView android:id="@+id/nickname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="@android:color/black" android:layout_toRightOf="@+id/avatar" android:layout_marginLeft="16dp" android:layout_centerVertical="true"/> <TextView android:id="@+id/remark" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" android:textColor="@android:color/darker_gray" android:layout_toRightOf="@+id/avatar" android:layout_below="@+id/nickname" android:layout_marginLeft="16dp"/> </RelativeLayout> ``` FriendAdapter.java(好友列表适配器): ```java public class FriendAdapter extends BaseAdapter implements SectionIndexer { private List<Friend> friendList; private Context context; private LayoutInflater inflater; public FriendAdapter(List<Friend> friendList, Context context) { this.friendList = friendList; this.context = context; inflater = LayoutInflater.from(context); } @Override public int getCount() { return friendList.size(); } @Override public Object getItem(int position) { return friendList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = inflater.inflate(R.layout.friend_item, parent, false); holder = new ViewHolder(); holder.avatar = convertView.findViewById(R.id.avatar); holder.nickname = convertView.findViewById(R.id.nickname); holder.remark = convertView.findViewById(R.id.remark); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } Friend friend = friendList.get(position); holder.avatar.setImageResource(friend.getAvatarId()); holder.nickname.setText(friend.getNickname()); holder.remark.setText(friend.getRemark()); return convertView; } @Override public Object[] getSections() { return new Object[0]; } @Override public int getPositionForSection(int sectionIndex) { for (int i = 0; i < getCount(); i++) { String nickname = friendList.get(i).getNickname(); String firstLetter = String.valueOf(nickname.charAt(0)).toUpperCase(); if (firstLetter.charAt(0) == sectionIndex) { return i; } } return -1; } @Override public int getSectionForPosition(int position) { String nickname = friendList.get(position).getNickname(); String firstLetter = String.valueOf(nickname.charAt(0)).toUpperCase(); return firstLetter.charAt(0); } private static class ViewHolder { ImageView avatar; TextView nickname; TextView remark; } } ``` MainActivity.java(主界面代码): ```java public class MainActivity extends AppCompatActivity implements TextWatcher { private EditText searchBox; private ListView friendListView; private FriendAdapter friendAdapter; private List<Friend> friendList; private List<Friend> filteredFriendList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); searchBox = findViewById(R.id.search_box); friendListView = findViewById(R.id.friend_list); friendList = new ArrayList<>(); friendList.add(new Friend(R.drawable.avatar1, "张三", "三哥")); friendList.add(new Friend(R.drawable.avatar2, "李四", "四哥")); friendList.add(new Friend(R.drawable.avatar3, "王五", "五哥")); friendList.add(new Friend(R.drawable.avatar4, "赵六", "六哥")); friendList.add(new Friend(R.drawable.avatar5, "钱七", "七哥")); friendList.add(new Friend(R.drawable.avatar6, "孙八", "八哥")); friendList.add(new Friend(R.drawable.avatar7, "周九", "九哥")); friendList.add(new Friend(R.drawable.avatar8, "吴十", "十哥")); friendAdapter = new FriendAdapter(friendList, this); friendListView.setAdapter(friendAdapter); searchBox.addTextChangedListener(this); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { filteredFriendList = new ArrayList<>(); for (Friend friend : friendList) { if (friend.getNickname().contains(s)) { filteredFriendList.add(friend); } } friendAdapter = new FriendAdapter(filteredFriendList, this); friendListView.setAdapter(friendAdapter); } @Override public void afterTextChanged(Editable s) { } } ``` 以上代码仅供参考,具体实现还需要根据需要进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值