先看看实现的效果
实现的效果说明:
答题区域始终在底部,每答一道题就向上添加一个折叠的样式;点击折叠的样式可以对该题进行修改,选中答案就折叠起来,如果,没有选答案,而去选择其他的题进行修改,也将刚才的那个折叠起来,也就是说最多可以有两个折叠的样式存在,点击下面新答的题,注意不是修改题,则折叠上面的所有。
直接上代码吧,讲解都在注释中
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>