1、功能实现所需jar
implementation 'com.hyman:flowlayout-lib:1.1.2'
implementation 'com.android.support:design:27.1.1'
核心代码类
public class EvaluationWidgetView extends LinearLayout {
private Context mContext;
private TagFlowLayout mTagFlowLayout;
private EditText mTagInputEt;
private TabLayout mTabLayout;
private int tabIndexDefault=1;
private List<EvaluationGroupBean> mList;
private HashMap<Integer,Set<Integer>> selectList=new HashMap<>();
private boolean tagInputState=false;
public EvaluationWidgetView(Context context) {
super(context);
mContext = context;
initView();
}
public EvaluationWidgetView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
mContext = context;
initView();
}
public EvaluationWidgetView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mContext = context;
initView();
}
private void initView() {
LayoutInflater mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = mLayoutInflater.inflate(R.layout.evaluation_widget_view_layout, this, false);
addView(view);
mTabLayout = view.findViewById(R.id.tab_layout);
mTabLayout.setTabMode(TabLayout.MODE_FIXED);
mTabLayout.setSelectedTabIndicatorHeight(0);
ViewCompat.setElevation(mTabLayout, 10);
mTagFlowLayout = view.findViewById(R.id.tag_flow_layout);
mTagInputEt = view.findViewById(R.id.tag_input_et);
mTagFlowLayout.setOnSelectListener(new TagFlowLayout.OnSelectListener() {
@Override
public void onSelected(Set<Integer> selectPosSet) {
int pos=mTagFlowLayout.getAdapter().getCount()-1;
boolean b=selectPosSet.contains(pos);
selectList.put(tabIndexDefault,selectPosSet);
if(b){
tagInputState=true;
}else {
tagInputState=false;
}
setTagInput();
}
});
mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
// setTagViewVisibleGone(tab.getPosition());
TextView textView=tab.getCustomView().findViewById(R.id.tab_e_tv);
textView.setTextColor(mContext.getResources().getColor(R.color.dark_orange));
tabIndexDefault=tab.getPosition();
setData();
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
TextView textView=tab.getCustomView().findViewById(R.id.tab_e_tv);
textView.setTextColor(mContext.getResources().getColor(R.color.color_999999));
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
private void setTagInput(){
mTagInputEt.setVisibility(tagInputState?View.VISIBLE:View.GONE);
}
public void setViewData(List<EvaluationGroupBean> datas){
if(datas!=null&&datas.size()>0){
// Gson gson=new Gson();
// Log.d("dlh", "---------------->"+gson.toJson(datas));
mList=datas;
}else {
mList=new ArrayList<>();
}
initTagFlow();
}
private void setData(){
if(tabIndexDefault>=0&&tabIndexDefault<mList.size()) {
setTagFlowData(mTagFlowLayout, mList.get(tabIndexDefault).getList());
}
}
private void initTagFlow(){
if(tabIndexDefault>=0&&tabIndexDefault<mList.size()) {
mTabLayout.addTab(mTabLayout.newTab().setCustomView(getTabTopIconBottomTextView(R.drawable.tab_make_complaints, R.string.tab_make_complaints)), false);
mTabLayout.addTab(mTabLayout.newTab().setCustomView(getTabTopIconBottomTextView(R.drawable.tab_satisfied, R.string.tab_satisfied)), true);
mTabLayout.addTab(mTabLayout.newTab().setCustomView(getTabTopIconBottomTextView(R.drawable.tab_great_praise, R.string.tab_great_praise)), false);
selectList.put(tabIndexDefault,new HashSet<Integer>());
setTagFlowData(mTagFlowLayout, mList.get(tabIndexDefault).getList());
}
}
private void setTagFlowData(TagFlowLayout tag,List<String> strings){
TagAdapter tagAdapter = new TagAdapter<String>(strings) {
@Override
public View getView(FlowLayout parent, int position, String o) {
LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
TextView tv = (TextView) layoutInflater.inflate(R.layout.tv,
parent, false);
tv.setText(o);
return tv;
}
@Override
public void onSelected(int position, View view) {
super.onSelected(position, view);
}
@Override
public void unSelected(int position, View view) {
super.unSelected(position, view);
}
};
if(selectList.get(tabIndexDefault)!=null&&selectList.get(tabIndexDefault).size()>0){
tagAdapter.setSelectedList(selectList.get(tabIndexDefault));
}else if(tagInputState){
tagAdapter.setSelectedList(tagAdapter.getCount()-1);
}
tag.setAdapter(tagAdapter);
}
public EvaluationGroupBean getSelectData(){
EvaluationGroupBean m=new EvaluationGroupBean();
Set<Integer> integerSet= mTagFlowLayout.getSelectedList();
EvaluationGroupBean temp=mList.get(tabIndexDefault);
List<String> selectItemStrings=new ArrayList<>();
Iterator<Integer> it = integerSet.iterator();
while (it.hasNext()) {
String item= temp.getList().get(it.next());
selectItemStrings.add(item);
}
if(tagInputState){
selectItemStrings.remove(selectItemStrings.size()-1);
}
m.setGroupTitle(temp.getGroupTitle());
m.setList(selectItemStrings);
return m;
}
public String getTagInputText(){
String inputString=null;
if(tagInputState){
inputString = mTagInputEt.getText().toString();
}
return inputString;
}
private View getTabTopIconBottomTextView(int resIcon,int resText){
LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = layoutInflater.inflate(R.layout.tab_top_icon_bottom_text_view_layout,null);
ImageView imageView=itemView.findViewById(R.id.tab_e_iv);
imageView.setImageResource(resIcon);
TextView textView=itemView.findViewById(R.id.tab_e_tv);
textView.setText(resText);
return itemView;
}所有需要布局文件
R.layout.evaluation_widget_view_layout
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" xmlns:zhy="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:background="@drawable/base_rectangle_white_shape" android:paddingTop="12dp" android:paddingBottom="24dp" android:paddingRight="12dp" android:paddingLeft="12dp" android:layout_height="wrap_content"> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_marginBottom="16dp" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:minHeight="64dp" app:tabSelectedTextColor="@color/orange" app:tabTextColor="@color/color_999999" android:layout_height="wrap_content"/> <com.zhy.view.flowlayout.TagFlowLayout android:id="@+id/tag_flow_layout" android:layout_width="wrap_content" android:layout_gravity="center_horizontal" android:layout_height="wrap_content" zhy:max_select="-1" /> <EditText android:id="@+id/tag_input_et" android:layout_width="match_parent" android:layout_marginTop="20dp" android:minHeight="100dp" android:hint="@string/str_rate_hint_text" android:layout_gravity="left" android:gravity="left" android:visibility="gone" android:padding="10dp" android:textSize="@dimen/textSize16" android:background="@drawable/base_rectangle_white_shape" android:layout_height="wrap_content"/> </LinearLayout>
R.layout.tab_top_icon_bottom_text_view_layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:layout_gravity="center" android:orientation="vertical"> <ImageView android:id="@+id/tab_e_iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="@drawable/tab_great_praise"/> <TextView android:id="@+id/tab_e_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="@dimen/textSize12" android:text="@string/tab_great_praise" android:textColor="@drawable/base_tag_tv_text_color"/> </LinearLayout>
R.layout.tv
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_margin="2dp" android:paddingTop="2dp" android:paddingBottom="2dp" android:paddingLeft="5dp" android:paddingRight="5dp" android:background="@drawable/see_item_tag_bg_selector" android:text="Helloworld" android:textColor="@drawable/base_tag_tv_text_color"> </TextView>
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦