折叠式答题样式

来源:互联网 发布:数据库关系模式例子 编辑:程序博客网 时间:2024/04/30 14:09

先看看实现的效果
这里写图片描述

实现的效果说明:
答题区域始终在底部,每答一道题就向上添加一个折叠的样式;点击折叠的样式可以对该题进行修改,选中答案就折叠起来,如果,没有选答案,而去选择其他的题进行修改,也将刚才的那个折叠起来,也就是说最多可以有两个折叠的样式存在,点击下面新答的题,注意不是修改题,则折叠上面的所有。

直接上代码吧,讲解都在注释中

public class FoldTestActivity extends AppCompatActivity {    private ScrollView mScrollView;    private LinearLayout mContentLinearView;    private TextView mAnsweredQuestionCountView;    private TextView mSubmitView;    private LinearLayout mBtnLinearView;    private RelativeLayout mBottomRelativeView;    private TextView mNoneView;    private TextView mLittleView;    private TextView mSomeView;    private TextView mOftenView;    private TextView mAlwaysView;    private TextView mQuestionView;    private View mItemView;    private List<String> lists;    private Map<String,String> answers;    private boolean isItemHadOpen;//是否已经存在一个待修改状态(open状态)的item    private int itemQuestion;//点击修改的条目,主要是记录上次的那个,然后将其关闭    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_fold_test);        initViews();        initDatas();        initListeners();    }    private void initViews() {        mScrollView = (ScrollView) findViewById(R.id.scrollView);        mContentLinearView = (LinearLayout) findViewById(R.id.linear_content);        mAnsweredQuestionCountView = (TextView) findViewById(R.id.count_question_already_answer);        mSubmitView = (TextView) findViewById(R.id.submit_test);        mBottomRelativeView = (RelativeLayout) findViewById(R.id.bottom_view);        mBtnLinearView = (LinearLayout) findViewById(R.id.btn_linear);        mQuestionView = (TextView) findViewById(R.id.text_question);        mNoneView = (TextView) findViewById(R.id.btn_none);        mLittleView = (TextView) findViewById(R.id.btn_little);        mSomeView = (TextView) findViewById(R.id.btn_some);        mOftenView = (TextView) findViewById(R.id.btn_often);        mAlwaysView = (TextView) findViewById(R.id.btn_always);    }    private void initDatas() {        lists = new ArrayList<>();        answers = new HashMap<>();        for(int i = 0;i<20;i++){            lists.add("经常吃的多吗?");        }        mAnsweredQuestionCountView.setText(0 + "/" + lists.size());        mQuestionView.setText((1) + "." + lists.get(0));    }    private void initListeners() {        mNoneView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                v.setTag(0);                changeBtnStatus((TextView) v);            }        });        mLittleView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                v.setTag(1);                changeBtnStatus((TextView) v);            }        });        mSomeView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                v.setTag(2);                changeBtnStatus((TextView) v);            }        });        mOftenView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                v.setTag(3);                changeBtnStatus((TextView) v);            }        });        mAlwaysView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                v.setTag(4);                changeBtnStatus((TextView) v);            }        });        mSubmitView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //TODO 提交答案            }        });    }    private void changeBtnStatus(final TextView currentView) {        final int currentQuestion = mContentLinearView.getChildCount() - 2;        //记录答案        /*        //answers是list时        answers.add(new BaseInfo(lists.get(currentQuestion - 1).getId(), lists.get(currentQuestion - 1).getAnswers().get(Integer.parseInt(v.getTag().toString())).getId()));*/        answers.put((currentQuestion-1)+"","答案");        //点击一个准备修改,没有选答案,直接继续答题,在这里将那个准备选的折叠        if (isItemHadOpen) {//存在一个已经处于修改状态的Item            mContentLinearView.getChildAt(itemQuestion).findViewById(R.id.layout_item).setVisibility(View.VISIBLE);            mContentLinearView.getChildAt(itemQuestion).findViewById(R.id.bottom_view).setVisibility(View.GONE);        }        //答题进度        mAnsweredQuestionCountView.setText(currentQuestion + "/" + lists.size());        for (int i = 0; i < mBtnLinearView.getChildCount(); i++) {            if (mBtnLinearView.getChildAt(i) instanceof TextView) {                mBtnLinearView.getChildAt(i).setBackgroundResource(R.drawable.btn_bg_self_test_can_click);                ((TextView) mBtnLinearView.getChildAt(i)).setTextColor(getResources().getColor(R.color.color_3183e9));            } else {                continue;            }        }        currentView.setTextColor(getResources().getColor(R.color.color_ffffff));        currentView.setBackgroundResource(R.drawable.btn_bg_self_test_select);        mItemView = LayoutInflater.from(FoldTestActivity.this).inflate(R.layout.layout_item_test_question, null, false);        final LinearLayout flodView = (LinearLayout) mItemView.findViewById(R.id.layout_item);        flodView.setTag(currentQuestion);        final RelativeLayout openView = (RelativeLayout) mItemView.findViewById(R.id.bottom_view);        //修改已经答过的题        flodView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //点击了一个准备修改,没有选答案继续点下一个要修改的情况,在这里折叠上一个                if (isItemHadOpen) {//存在一个已经处于修改状态的Item                    mContentLinearView.getChildAt(itemQuestion).findViewById(R.id.layout_item).setVisibility(View.VISIBLE);                    mContentLinearView.getChildAt(itemQuestion).findViewById(R.id.bottom_view).setVisibility(View.GONE);                }                isItemHadOpen = true;                itemQuestion = currentQuestion;//                Log.e("------------>", "item click" + isItemHadOpen + "itemQuestion" + itemQuestion);                //点击已经答过的题,展开进行修改                flodView.setVisibility(View.GONE);                openView.setVisibility(View.VISIBLE);                //展开后题目                int currentItemId = Integer.parseInt(flodView.getTag().toString());                ((TextView) (openView.findViewById(R.id.text_question_open))).setText(currentItemId + "." + lists.get(currentItemId - 1));                //展开后显示选中的答案                TextView textView = null;                switch (Integer.parseInt(flodView.findViewById(R.id.text_answer).getTag().toString())) {                    case 0:                        textView = (TextView) openView.findViewById(R.id.btn_none);                        break;                    case 1:                        textView = (TextView) openView.findViewById(R.id.btn_little);                        break;                    case 2:                        textView = (TextView) openView.findViewById(R.id.btn_some);                        break;                    case 3:                        textView = (TextView) openView.findViewById(R.id.btn_often);                        break;                    case 4:                        textView = (TextView) openView.findViewById(R.id.btn_always);                        break;                }                textView.setBackgroundResource(R.drawable.btn_bg_self_test_select);                textView.setTextColor(getResources().getColor(R.color.color_ffffff));                //每个button答案添加点击事件                final LinearLayout btnLinear = (LinearLayout) openView.findViewById(R.id.btn_linear);                final List<TextView> btns = new ArrayList<TextView>();                for (int i = 0; i < btnLinear.getChildCount(); i++) {                    if (btnLinear.getChildAt(i) instanceof TextView) {                        btns.add((TextView) btnLinear.getChildAt(i));                        btnLinear.getChildAt(i).setTag(btns.size() - 1);                        btnLinear.getChildAt(i).setOnClickListener(new View.OnClickListener() {                            @Override                            public void onClick(View v) {                                for (int j = 0; j < btns.size(); j++) {                                    btns.get(j).setBackgroundResource(R.drawable.btn_bg_self_test_can_click);                                    btns.get(j).setTextColor(getResources().getColor(R.color.color_3183e9));                                }                                //修改完答案后将展开的View折叠                                flodView.setVisibility(View.VISIBLE);                                openView.setVisibility(View.GONE);                                //修改折叠起来时显示的答案                                ((TextView) flodView.findViewById(R.id.text_answer)).setText(((TextView) v).getText());                                ((TextView) (flodView.findViewById(R.id.text_answer))).setTag(v.getTag());                                //记录答案 题号从1开始,答案从0开始,使用list存储答案,修改时要记得移除之前的那个答案,否则会出错//                                answers.remove(currentQuestion-1);//                                answers.add(new BaseInfo(lists.get(currentQuestion - 1).getId(), lists.get(currentQuestion - 1).getAnswers().get(Integer.parseInt(v.getTag().toString())).getId()));                                answers.put((currentQuestion-1)+"","答案");                                isItemHadOpen = false;                            }                        });                    } else {                        continue;                    }                }            }        });        //每答一个题就添加一个折叠样式的View        mContentLinearView.addView(mItemView, currentQuestion);        ((TextView) (mItemView.findViewById(R.id.text_question))).setText(currentQuestion + "." + lists.get(currentQuestion - 1));        ((TextView) (mItemView.findViewById(R.id.text_answer))).setText(currentView.getText());        mItemView.findViewById(R.id.text_answer).setTag(currentView.getTag());        mScrollView.postDelayed(new Runnable() {            @Override            public void run() {                mScrollView.fullScroll(View.FOCUS_DOWN);            }        }, 30);//        Log.e("-------------->", "currentQuestion" + currentQuestion + ",size" + lists.size());        if (currentQuestion >= lists.size()) {            mSubmitView.setVisibility(View.VISIBLE);            mBottomRelativeView.setVisibility(View.GONE);        } else {            mQuestionView.setText((currentQuestion + 1) + "." + lists.get(currentQuestion));            //将答题的View重新至位            for (int i = 0; i < mBtnLinearView.getChildCount(); i++) {                if (mBtnLinearView.getChildAt(i) instanceof TextView) {                    mBtnLinearView.getChildAt(i).setBackgroundResource(R.drawable.btn_bg_self_test_can_click);                    ((TextView) mBtnLinearView.getChildAt(i)).setTextColor(getResources().getColor(R.color.color_3183e9));                } else {                    continue;                }            }        }    }

activity布局activity_fold_test

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_fold_test"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.trtpre.www.demo.activitys.FoldTestActivity">    <ScrollView        android:id="@+id/scrollView"        android:layout_width="match_parent"        android:layout_height="match_parent">        <LinearLayout            android:id="@+id/linear_content"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:orientation="vertical">            <LinearLayout                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:orientation="vertical">                <TextView                    android:layout_width="match_parent"                    android:layout_height="300dp"                    android:background="@color/color_3183e9"                    android:text="一些其他的View"                    android:gravity="center"/>            </LinearLayout>            <RelativeLayout                android:id="@+id/bottom_view"                android:layout_width="match_parent"                android:layout_height="200dp"                android:layout_alignParentBottom="true"                android:layout_marginLeft="10dp"                android:layout_marginRight="10dp"                android:background="@drawable/bg_self_test"                android:orientation="vertical">                <TextView                    android:id="@+id/text_question"                    android:layout_width="match_parent"                    android:layout_height="wrap_content"                    android:layout_marginLeft="14dp"                    android:layout_marginRight="14dp"                    android:layout_marginTop="24dp"                    android:lineSpacingExtra="5dp"                    android:text="1、你的脸比别人大吗"                    android:textColor="@color/color_3183e9" />                <LinearLayout                    android:id="@+id/btn_linear"                    android:layout_width="match_parent"                    android:layout_height="wrap_content"                    android:layout_alignParentBottom="true"                    android:layout_marginBottom="70dp"                    android:gravity="center"                    android:orientation="horizontal">                    <View                        android:layout_width="wrap_content"                        android:layout_height="50dp"                        android:layout_weight="1" />                    <TextView                        android:id="@+id/btn_none"                        android:layout_width="50dp"                        android:layout_height="50dp"                        android:background="@drawable/btn_bg_self_test_can_click"                        android:clickable="true"                        android:gravity="center"                        android:text="没有"                        android:textColor="@color/color_3183e9"                        android:textSize="14sp" />                    <View                        android:layout_width="wrap_content"                        android:layout_height="50dp"                        android:layout_weight="1" />                    <TextView                        android:id="@+id/btn_little"                        android:layout_width="50dp"                        android:layout_height="50dp"                        android:background="@drawable/btn_bg_self_test_can_click"                        android:clickable="true"                        android:gravity="center"                        android:text="很少"                        android:textColor="@color/color_3183e9"                        android:textSize="14sp" />                    <View                        android:layout_width="wrap_content"                        android:layout_height="50dp"                        android:layout_weight="1" />                    <TextView                        android:id="@+id/btn_some"                        android:layout_width="50dp"                        android:layout_height="50dp"                        android:background="@drawable/btn_bg_self_test_can_click"                        android:clickable="true"                        android:gravity="center"                        android:text="有时"                        android:textColor="@color/color_3183e9"                        android:textSize="14sp" />                    <View                        android:layout_width="wrap_content"                        android:layout_height="50dp"                        android:layout_weight="1" />                    <TextView                        android:id="@+id/btn_often"                        android:layout_width="50dp"                        android:layout_height="50dp"                        android:background="@drawable/btn_bg_self_test_can_click"                        android:clickable="true"                        android:gravity="center"                        android:text="经常"                        android:textColor="@color/color_3183e9"                        android:textSize="14sp" />                    <View                        android:layout_width="wrap_content"                        android:layout_height="50dp"                        android:layout_weight="1" />                    <TextView                        android:id="@+id/btn_always"                        android:layout_width="50dp"                        android:layout_height="50dp"                        android:background="@drawable/btn_bg_self_test_can_click"                        android:clickable="true"                        android:gravity="center"                        android:text="总是"                        android:textColor="@color/color_3183e9"                        android:textSize="14sp" />                    <View                        android:layout_width="wrap_content"                        android:layout_height="50dp"                        android:layout_weight="1" />                </LinearLayout>                <TextView                    android:id="@+id/count_question_already_answer"                    android:layout_width="match_parent"                    android:layout_height="wrap_content"                    android:layout_alignParentBottom="true"                    android:layout_marginBottom="20dp"                    android:gravity="center"                    android:text="1/60" />            </RelativeLayout>            <TextView                android:id="@+id/submit_test"                android:layout_width="280dp"                android:layout_height="45dp"                android:layout_gravity="center"                android:layout_marginBottom="60dp"                android:layout_marginLeft="49dp"                android:layout_marginRight="49dp"                android:layout_marginTop="50dp"                android:background="@drawable/bg_btn_submit_test_select"                android:gravity="center"                android:text="提交"                android:textColor="@color/color_ffffff"                android:textSize="16sp"                android:visibility="gone"/>        </LinearLayout>    </ScrollView></RelativeLayout>

每个条目的布局layout_item_test_question

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal"    android:paddingBottom="10dp"    android:paddingLeft="10dp"    android:paddingRight="10dp"    android:background="@color/color_f5f5f5">    <LinearLayout        android:id="@+id/layout_item"        android:layout_width="match_parent"        android:layout_height="80dp"        android:orientation="horizontal"        android:background="@drawable/bg_self_test"        >        <TextView            android:id="@+id/text_question"            android:layout_width="wrap_content"            android:layout_height="match_parent"            android:layout_weight="1"            android:gravity="center_vertical"            android:textColor="@color/color_666666"            android:textSize="16sp"            android:layout_marginLeft="15dp"            android:lines="1"            android:ellipsize="end"/>        <TextView            android:id="@+id/text_answer"            android:layout_width="33dp"            android:layout_height="33dp"            android:background="@drawable/btn_bg_self_test_not_click"            android:gravity="center"            android:textSize="12sp"            android:textColor="@color/color_999999"            android:layout_marginRight="20dp"            />    </LinearLayout>    <RelativeLayout        android:id="@+id/bottom_view"        android:layout_width="match_parent"        android:layout_height="200dp"        android:background="@drawable/bg_self_test"        android:orientation="vertical"        android:visibility="gone">        <TextView            android:id="@+id/text_question_open"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_marginLeft="14dp"            android:layout_marginRight="14dp"            android:layout_marginTop="24dp"            android:lineSpacingExtra="5dp"            android:text="1、你的脸比别人大吗"            android:textColor="@color/color_3183e9" />        <LinearLayout            android:id="@+id/btn_linear"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_alignParentBottom="true"            android:layout_marginBottom="70dp"            android:gravity="center"            android:orientation="horizontal">            <View                android:layout_width="wrap_content"                android:layout_height="50dp"                android:layout_weight="1" />            <TextView                android:id="@+id/btn_none"                android:layout_width="50dp"                android:layout_height="50dp"                android:background="@drawable/btn_bg_self_test_can_click"                android:clickable="true"                android:gravity="center"                android:text="没有"                android:textColor="@color/color_3183e9"                android:textSize="14sp" />            <View                android:layout_width="wrap_content"                android:layout_height="50dp"                android:layout_weight="1" />            <TextView                android:id="@+id/btn_little"                android:layout_width="50dp"                android:layout_height="50dp"                android:background="@drawable/btn_bg_self_test_can_click"                android:clickable="true"                android:gravity="center"                android:text="很少"                android:textColor="@color/color_3183e9"                android:textSize="14sp" />            <View                android:layout_width="wrap_content"                android:layout_height="50dp"                android:layout_weight="1" />            <TextView                android:id="@+id/btn_some"                android:layout_width="50dp"                android:layout_height="50dp"                android:background="@drawable/btn_bg_self_test_can_click"                android:clickable="true"                android:gravity="center"                android:text="有时"                android:textColor="@color/color_3183e9"                android:textSize="14sp" />            <View                android:layout_width="wrap_content"                android:layout_height="50dp"                android:layout_weight="1" />            <TextView                android:id="@+id/btn_often"                android:layout_width="50dp"                android:layout_height="50dp"                android:background="@drawable/btn_bg_self_test_can_click"                android:clickable="true"                android:gravity="center"                android:text="经常"                android:textColor="@color/color_3183e9"                android:textSize="14sp" />            <View                android:layout_width="wrap_content"                android:layout_height="50dp"                android:layout_weight="1" />            <TextView                android:id="@+id/btn_always"                android:layout_width="50dp"                android:layout_height="50dp"                android:background="@drawable/btn_bg_self_test_can_click"                android:clickable="true"                android:gravity="center"                android:text="总是"                android:textColor="@color/color_3183e9"                android:textSize="14sp" />            <View                android:layout_width="wrap_content"                android:layout_height="50dp"                android:layout_weight="1" />        </LinearLayout>    </RelativeLayout></LinearLayout>
原创粉丝点击