项目中要做一个考题的问卷,网上博客完整、又漂亮写出来的比较少。

  • 灰常感谢这个朋友给的思路,参考了:http://blog.csdn.net/jing110fei/article/details/46618229
  • 上效果图

里面的注释已经很详细了,不做过多解析了

  • 有点麻烦的就是,1:要拿对每个数据,注意里面的i j z等角标; 2:将每个答案拼好成一个json数据,多个答案就会麻烦点。

  • Activity代码

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;import com.example.administrator.testdemo.model.Answer;
import com.example.administrator.testdemo.model.Page;
import com.example.administrator.testdemo.model.Quesition;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;import java.util.ArrayList;public class MainActivity extends Activity {// 数据源 假数据private String resultJosn = "{\"result\":\"1\",\"type\":\"1\",\"data\":[{\"type\":\"3\",\"eid\":\"11\",\"problem\":\"1、 什么样的团队更容易获得成功?\",\"trueanswer\":\"B\",\"optionData\":[{\"option\":\"团结\",\"isChecked\":\"0\"},{\"option\":\"精英\",\"isChecked\":\"0\"},{\"option\":\"聪明\",\"isChecked\":\"0\"},{\"option\":\"领导\",\"isChecked\":\"0\"}]},{\"type\":\"3\",\"eid\":\"12\",\"problem\":\"2、 学习态度\",\"trueanswer\":\"C\",\"optionData\":[{\"option\":\"好\",\"isChecked\":\"0\"},{\"option\":\"一般\",\"isChecked\":\"0\"},{\"option\":\"很好\",\"isChecked\":\"0\"},{\"option\":\"差\",\"isChecked\":\"0\"}]},{\"type\":\"2\",\"eid\":\"13\",\"problem\":\"3、 这件事真的是对的吗\",\"trueanswer\":\"A\",\"optionData\":[{\"option\":\"正确\",\"isChecked\":\"0\"},{\"option\":\"错误\",\"isChecked\":\"0\"}]},{\"type\":\"2\",\"eid\":\"14\",\"problem\":\"4、 这个道理真的对吗\",\"trueanswer\":\"B\",\"optionData\":[{\"option\":\"正确\",\"isChecked\":\"0\"},{\"option\":\"错误\",\"isChecked\":\"0\"}]},{\"type\":\"1\",\"eid\":\"15\",\"problem\":\"5、 老师姓什么?\",\"trueanswer\":\"D\",\"optionData\":[{\"option\":\"赵\",\"isChecked\":\"0\"},{\"option\":\"钱\",\"isChecked\":\"0\"},{\"option\":\"孙\",\"isChecked\":\"0\"},{\"option\":\"李\",\"isChecked\":\"0\"}]},{\"type\":\"1\",\"eid\":\"16\",\"problem\":\"6、 这个要多上钱\",\"trueanswer\":\"C\",\"optionData\":[{\"option\":\"100\",\"isChecked\":\"0\"},{\"option\":\"200\",\"isChecked\":\"0\"},{\"option\":\"300\",\"isChecked\":\"0\"},{\"option\":\"400\",\"isChecked\":\"0\"}]},{\"type\":\"2\",\"eid\":\"17\",\"problem\":\"7、 我不用学这个课程也能成功\",\"trueanswer\":\"B\",\"optionData\":[{\"option\":\"正确\",\"isChecked\":\"0\"},{\"option\":\"错误\",\"isChecked\":\"0\"}]},{\"type\":\"2\",\"eid\":\"18\",\"problem\":\"8、 学习人数已经由300人了\",\"trueanswer\":\"A\",\"optionData\":[{\"option\":\"正确\",\"isChecked\":\"0\"},{\"option\":\"错误\",\"isChecked\":\"0\"}]},{\"type\":\"1\",\"eid\":\"19\",\"problem\":\"9、 该课程要上多久\",\"trueanswer\":\"A\",\"optionData\":[{\"option\":\"10分钟\",\"isChecked\":\"0\"},{\"option\":\"20分钟\",\"isChecked\":\"0\"},{\"option\":\"30分钟\",\"isChecked\":\"0\"},{\"option\":\"40分钟\",\"isChecked\":\"0\"}]},{\"type\":\"2\",\"eid\":\"20\",\"problem\":\"10、 学过这个课程的都成功了\",\"trueanswer\":\"B\",\"optionData\":[{\"option\":\"正确\",\"isChecked\":\"0\"},{\"option\":\"错误\",\"isChecked\":\"0\"}]}]}\n";
//    private String resultJosn = "{\"result\":\"1\",\"type\":\"1\",\"data\":[{\"type\":\"2\",\"eid\":\"6\",\"problem\":\"1、 真不拿\",\"trueanswer\":\"A\",\"optionData\":[{\"option\":\"正确\",\"isChecked\":\"0\"},{\"option\":\"错误\",\"isChecked\":\"0\"}]},{\"type\":\"2\",\"eid\":\"7\",\"problem\":\"2、 这个怎么做\",\"trueanswer\":\"A\",\"optionData\":[{\"option\":\"1\",\"isChecked\":\"1\"},{\"option\":\"2\",\"isChecked\":\"0\"},{\"option\":\"3\",\"isChecked\":\"0\"},{\"option\":\"4\",\"isChecked\":\"0\"}]},{\"type\":\"2\",\"eid\":\"8\",\"problem\":\"3、 wgergwe\",\"trueanswer\":\"B\",\"optionData\":[{\"option\":\"正确\",\"isChecked\":\"0\"},{\"option\":\"错误\",\"isChecked\":\"0\"}]},{\"type\":\"3\",\"eid\":\"9\",\"problem\":\"4、 szdfasdf\",\"trueanswer\":\"C\",\"optionData\":[{\"option\":\"112\",\"isChecked\":\"0\"},{\"option\":\"22\",\"isChecked\":\"0\"},{\"option\":\"23\",\"isChecked\":\"0\"},{\"option\":\"43\",\"isChecked\":\"1\"}]},{\"type\":\"2\",\"eid\":\"10\",\"problem\":\"5、 rqwerqw\",\"trueanswer\":\"B\",\"optionData\":[{\"option\":\"正确\",\"isChecked\":\"0\"},{\"option\":\"错误\",\"isChecked\":\"0\"}]}]}";private LinearLayout test_layout;private Page the_page;// 答案列表private ArrayList<Answer> the_answer_list;// 问题列表private ArrayList<Quesition> the_quesition_list;// 问题所在的Viewprivate View que_view;// 答案所在的Viewprivate View ans_view;private LayoutInflater xInflater;private Page page;// 下面这两个list是为了实现点击的时候改变图片,因为单选多选时情况不一样,为了方便控制// 存每个问题下的TextViewprivate ArrayList<ArrayList<TextView>> textlist = new ArrayList<ArrayList<TextView>>();// 存每个答案的TextViewprivate ArrayList<TextView> textlist2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);xInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);// 初始化数据initDate();// 提交按钮TextView button = (TextView) findViewById(R.id.tv_commit);button.setOnClickListener(new submitOnClickListener(page));}private void initDate() {ArrayList<Quesition> quesitionsList = null;try {quesitionsList = new ArrayList<>();//问题列表JSONObject resultJson = new JSONObject(resultJosn);JSONArray arrayJson = resultJson.optJSONArray("data");for (int i=0;i<arrayJson.length();i++){JSONObject subObject = arrayJson.getJSONObject(i);ArrayList<Answer> answers = new ArrayList<>();JSONArray arrayAnswerJson = subObject.optJSONArray("optionData");//问题的答案for (int j=0; j< arrayAnswerJson.length(); j++) {JSONObject answerObject = arrayAnswerJson.getJSONObject(j);Answer a_answer = new Answer();a_answer.setAnswerId(""+j);a_answer.setAnswer_content(answerObject.getString("option"));a_answer.setAns_state(Integer.parseInt(answerObject.getString("isChecked")));answers.add(a_answer);}Quesition q_quesition = new Quesition();q_quesition.setQuesitionId(subObject.getString("eid"));//问题的idq_quesition.setType(subObject.getString("type"));//类型,1判断 2单选 3不定项q_quesition.setContent(subObject.getString("problem"));//问题q_quesition.setAnswers(answers);q_quesition.setQue_state(0);quesitionsList.add(q_quesition);}} catch (JSONException e) {e.printStackTrace();}page = new Page();page.setPageId("1");page.setStatus("0");page.setTitle("精英问卷");page.setQuesitions(quesitionsList);// 加载布局initView(page);}private void initView(Page page) {// TODO Auto-generated method stub// 这是要把问题的动态布局加入的布局test_layout = (LinearLayout) findViewById(R.id.lly_test);TextView page_txt = (TextView) findViewById(R.id.txt_title);page_txt.setText(page.getTitle());// 获得问题即第二层的数据the_quesition_list = page.getQuesitions();// 根据第二层问题的多少,来动态加载布局for (int i = 0; i < the_quesition_list.size(); i++) {que_view = xInflater.inflate(R.layout.quesition_layout, null);ImageView iv_type = (ImageView) que_view.findViewById(R.id.iv_type);TextView txt_que = (TextView) que_view.findViewById(R.id.txt_question_item);// 这是第三层布局要加入的地方LinearLayout add_layout = (LinearLayout) que_view.findViewById(R.id.lly_answer);View v_line = (View) que_view.findViewById(R.id.v_line);if(i == 0){//第一道题目的分隔条不用显示v_line.setVisibility(View.GONE);}//类型:1选择题;2判断题 3不定项if (the_quesition_list.get(i).getType().equals("1")) {iv_type.setImageResource(R.mipmap.single_menu);} else if (the_quesition_list.get(i).getType().equals("2")){iv_type.setImageResource(R.mipmap.judge_menu);} else if (the_quesition_list.get(i).getType().equals("3")){iv_type.setImageResource(R.mipmap.more_menu);}txt_que.setText(the_quesition_list.get(i).getContent());//设置问题题目// 获得答案即第三层数据the_answer_list = the_quesition_list.get(i).getAnswers();textlist2 = new ArrayList<>();for (int j = 0; j < the_answer_list.size(); j++) {ans_view = xInflater.inflate(R.layout.answer_layout, null);TextView txt_ans = (TextView) ans_view.findViewById(R.id.txt_answer_item);TextView tv_menu = (TextView) ans_view.findViewById(R.id.tv_menu);//自己手动为每个问题的选项加上相应的ABCD...if (j==0){tv_menu.setText("A");}else if (j==1){tv_menu.setText("B");}else if (j==2){tv_menu.setText("C");}else if (j==3){tv_menu.setText("D");}else if (j==4){tv_menu.setText("E");}else if (j==5){tv_menu.setText("F");}else if (j==6){tv_menu.setText("G");}// 判断哪个答案已选if (the_answer_list.get(j).getAns_state() == 1) {
//                    Toast.makeText(getApplicationContext(),"1",Toast.LENGTH_SHORT).show();the_quesition_list.get(i).setQue_state(1);tv_menu.setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_red));tv_menu.setTextColor(getResources().getColor(R.color.colorWhite));} else {
//                    Toast.makeText(getApplicationContext(),"0",Toast.LENGTH_SHORT).show();tv_menu.setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_white));tv_menu.setTextColor(getResources().getColor(R.color.colorblack));}textlist2.add(tv_menu);txt_ans.setText(the_answer_list.get(j).getAnswer_content());LinearLayout lly_answer_size = (LinearLayout) ans_view.findViewById(R.id.lly_answer_size);if (j%2!=0){//为了美观了,将答案的背景隔开一下lly_answer_size.setBackgroundColor(getResources().getColor(R.color.colorWhite));}//设置点击事件lly_answer_size .setOnClickListener(new answerItemOnClickListener(i, j, the_answer_list, txt_ans));add_layout.addView(ans_view);}textlist.add(textlist2);test_layout.addView(que_view);//将生成的问题都添加到一个布局文件中}}/*** 试卷各个选项的点击事件*/class answerItemOnClickListener implements View.OnClickListener {private int i;private int j;private TextView txt;private ArrayList<Answer> the_answer_lists;public answerItemOnClickListener(int i, int j, ArrayList<Answer> the_answer_list, TextView text) {this.i = i;this.j = j;this.the_answer_lists = the_answer_list;this.txt = text;}// 实现点击选项后改变选中状态以及对应图片@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub// 判断当前问题是单选还是多选if (the_quesition_list.get(i).getType().equals("3")) {//1选择题;2判断题 3不定项for(int z=0;z<the_answer_list.size();z++){if(the_answer_list.get(z).getAns_state()==1){the_quesition_list.get(i).setQue_state(1);
//                        return;}else{the_quesition_list.get(i).setQue_state(0);}}if (the_answer_lists.get(j).getAns_state() == 0) {
//                    Toast.makeText(getApplication(), "0", Toast.LENGTH_SHORT).show();textlist.get(i).get(j).setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_red));textlist.get(i).get(j).setTextColor(getResources().getColor(R.color.colorWhite));the_answer_lists.get(j).setAns_state(1);//注意一下这些相应的角标是用i 、j还是z。the_quesition_list.get(i).setQue_state(1);} else {
//                    Toast.makeText(getApplication(), "1", Toast.LENGTH_SHORT).show();textlist.get(i).get(j).setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_white));textlist.get(i).get(j).setTextColor(getResources().getColor(R.color.colorblack));the_answer_lists.get(j).setAns_state(0);the_quesition_list.get(i).setQue_state(0);}} else {// 单选for (int z = 0; z < the_answer_lists.size(); z++) {if (z == j) {
//                        Toast.makeText(getApplication(), "3", Toast.LENGTH_SHORT).show();// 如果当前未被选中textlist.get(i).get(j).setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_red));textlist.get(i).get(j).setTextColor(getResources().getColor(R.color.colorWhite));the_answer_lists.get(z).setAns_state(1);the_quesition_list.get(i).setQue_state(1);} else {
//                        Toast.makeText(getApplication(), "4", Toast.LENGTH_SHORT).show();the_answer_lists.get(z).setAns_state(0);the_quesition_list.get(i).setQue_state(1);textlist.get(i).get(z).setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_white));textlist.get(i).get(z).setTextColor(getResources().getColor(R.color.colorblack));}}}}}/*** 提交按钮事件处理*/class submitOnClickListener implements View.OnClickListener {private Page page;public submitOnClickListener(Page page) {this.page = page;}@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub// 判断是否答完题boolean isState = true;// 最终要的json数组JSONArray jsonArray = new JSONArray();// 点击提交的时候,先判断状态,如果有未答完的就提示,如果没有再把每条答案提交(包含问卷ID 问题ID 及答案ID)// 注:不用管是否是一个问题的答案,就以答案的个数为准来提交上述格式的数据for (int i = 0; i < the_quesition_list.size(); i++) {the_answer_list = the_quesition_list.get(i).getAnswers();// 判断是否有题没答完if (the_quesition_list.get(i).getQue_state() == 0) {Toast.makeText(getApplicationContext(), "您第" + (i + 1) + "题没有答完", Toast.LENGTH_LONG).show();jsonArray = null;isState = false;return;} else {JSONObject json = new JSONObject();String answers2 = "";String answers = "";for (int j = 0; j < the_answer_list.size(); j++) {if (the_answer_list.get(j).getAns_state() == 1) {try {answers2 = the_quesition_list.get(i).getQuesitionId();if (answers.length()==0){answers = answers +j;}else {answers = answers +"-"+ j;}//===为不定项拼接答案================================if (answers.contains("0")) {answers = answers.replace("0", "A");}if (answers.contains("1")) {answers = answers.replace("1", "B");}if (answers.contains("2")) {answers = answers.replace("2", "C");}if (answers.contains("3")) {answers = answers.replace("3", "D");}if (answers.contains("4")) {answers = answers.replace("4", "E");}if (answers.contains("5")) {answers = answers.replace("5", "F");}} catch (Exception e) {e.printStackTrace();}}}try {json.put("answer", answers);json.put("eid", answers2);
//                        Toast.makeText(getApplicationContext(), json + "", Toast.LENGTH_SHORT).show();jsonArray.put(json);} catch (JSONException e) {e.printStackTrace();}}}Log.d("jsonArray-->", "" + jsonArray);Toast.makeText(getApplicationContext(), "提交的数据:" + jsonArray, Toast.LENGTH_SHORT).show();}}
}

  • activity_main.xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/colorWhite"android:orientation="vertical"><TextViewandroid:id="@+id/txt_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center"android:background="@color/colorPrimaryDark"android:gravity="center"android:padding="10dp"android:text="调查问卷"android:textColor="@color/colorWhite"android:textSize="18sp" /><Viewandroid:layout_width="match_parent"android:layout_height="0.5dp"android:background="@color/colorGray" /><ScrollViewandroid:layout_width="match_parent"android:layout_height="0dp"android:scrollbars="none"android:background="@color/colorLightGrey"android:layout_weight="1"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:id="@+id/tv_class_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:background="@color/colorWhite"android:gravity="center_vertical"android:paddingTop="10dp"android:paddingLeft="15dp"android:text="闯关吧,少年"android:textColor="@color/colorblack"android:textSize="17sp" /><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:paddingTop="5dp"android:paddingLeft="15dp"android:paddingBottom="10dp"android:background="@android:color/white"android:gravity="center_vertical"android:text="(共10题,总分100分)"android:textColor="@color/m_silver"android:textSize="12sp" /><LinearLayoutandroid:id="@+id/lly_test"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"></LinearLayout><Viewandroid:layout_width="match_parent"android:layout_height="35dp"android:background="@color/white2"/></LinearLayout></ScrollView><Viewandroid:layout_width="match_parent"android:layout_height="0.3dp"android:background="@color/m_silver" /><TextViewandroid:id="@+id/tv_commit"android:layout_width="192dp"android:layout_height="40dp"android:layout_gravity="center"android:layout_marginBottom="15dp"android:layout_marginTop="15dp"android:background="@color/colorRed"android:gravity="center"android:padding="10dp"android:text="提交"android:textColor="@android:color/white"android:textSize="18sp" />
</LinearLayout>-------------------------------------------
- 每个问题的布局文件:quesition_layout.xml<?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:background="@color/white2"android:orientation="vertical"><Viewandroid:id="@+id/v_line"android:layout_width="match_parent"android:layout_height="35dp"android:background="@color/white2"/><Viewandroid:layout_width="match_parent"android:layout_height="0.5dp"android:background="@color/m_silver"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingTop="15dp"android:paddingBottom="20dp"android:background="@color/colorWhite"android:gravity="center_vertical"android:orientation="horizontal"><ImageViewandroid:id="@+id/iv_type"android:layout_width="47dp"android:layout_height="17dp"android:scaleType="fitXY"android:src="@mipmap/single_menu" /><TextViewandroid:id="@+id/txt_question_item"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:text="题目"android:textColor="@color/m_charcoal_grey"android:textSize="17sp" /></LinearLayout><LinearLayoutandroid:id="@+id/lly_answer"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"/></LinearLayout>

  • 每个答案的布局文件:answer_layout.xml
<?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="38dp"android:orientation="vertical"><LinearLayoutandroid:id="@+id/lly_answer_size"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_vertical"android:paddingLeft="40dp"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_menu"android:layout_width="22dp"android:layout_height="22dp"android:layout_gravity="center_vertical"android:gravity="center"android:background="@drawable/shape_white"android:textColor="@color/m_item_text"android:layout_margin="10dp"android:padding="1dp"android:text="A"android:textSize="12sp" /><TextViewandroid:id="@+id/txt_answer_item"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:textColor="@color/m_item_text"android:textSize="15sp" /></LinearLayout>
</LinearLayout>

  • color.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources><color name="colorPrimary">#3F51B5</color><color name="colorPrimaryDark">#303F9F</color><color name="colorAccent">#FF4081</color><color name="colorWhite">#ffffff</color><color name="white2">#f5f3f3</color><color name="colorRed">#ff0000</color><color name="colorGray">#666666</color><color name="colorblack">#000000</color><color name="colorLightGrey">#eeeeee</color><color name="colorTransparent">#00000000</color><color name="m_charcoal_grey">#323233</color><!--深灰色--><color name="m_steel">#7d7d80</color><!--灰色--><color name="m_silver">#c8c8cc</color><!--浅灰色--><color name="m_pale_grey">#f2f2f7</color><!--淡灰色--><color name="m_warm_grey">#777777</color><color name="m_item_text">#535353</color>
</resources>

  • 三个model类Page、Quesition、Answer
/*** 试卷*/
public class Page {//问卷idprivate String pageId;//问卷状态private String status;//问卷主题private String title;//题目private ArrayList<Quesition> quesitions;public ArrayList<Quesition> getQuesitions() {return quesitions;}public void setQuesitions(ArrayList<Quesition> quesitions) {this.quesitions = quesitions;}public String getPageId() {return pageId;}public void setPageId(String pageId) {this.pageId = pageId;}public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}
}
/*** 问题类*/
public class Quesition {//题目idprivate String quesitionId;//单选多选标识private String type;//0 单选 1 多选//题目private String content;//选项private ArrayList<Answer> answers;//是否解答private int que_state;public int getQue_state() {return que_state;}public void setQue_state(int que_state) {this.que_state = que_state;}public String getQuesitionId() {return quesitionId;}public void setQuesitionId(String quesitionId) {this.quesitionId = quesitionId;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public ArrayList<Answer> getAnswers() {return answers;}public void setAnswers(ArrayList<Answer> answers) {this.answers = answers;}
}
/*** 答案类*/
public class Answer {//答案idprivate String answerId;//答案主体private String answer_content;//答案是否被解答private int ans_state;public int getAns_state() {return ans_state;}public void setAns_state(int ans_state) {this.ans_state = ans_state;}public String getAnswerId() {return answerId;}public void setAnswerId(String answerId) {this.answerId = answerId;}public String getAnswer_content() {return answer_content;}public void setAnswer_content(String answer_content) {this.answer_content = answer_content;}
}

两个圆的问件:
shape_red.xml(红圆)
<?xml version="1.0" encoding="UTF-8"?>
<shapexmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"android:useLevel="false" ><solid android:color="@color/colorRed" /><solidandroid:color="@color/colorRed" /><strokeandroid:width="1dp"android:color="@color/colorRed" />
</shape>
  • shape_white.xml(白圆)

<?xml version="1.0" encoding="UTF-8"?>
<shapexmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"android:useLevel="false" ><solid android:color="@color/colorWhite" /><strokeandroid:width="1dp"android:color="@color/colorLightGrey" />
</shape>

  • 以上就是全部代码。

  • 源码下载地址:http://download.csdn.net/detail/qq_32519693/9924085

不过这样的做法,从性能上来说是不太好。因为每次都是将每个问题的信息动态地添加进去,比较消耗性能。由于现在项目时间紧任务中暂时这样来,如果其他朋友还有更好实现方式,请分享一下。

Android 完整漂亮问卷、试卷 -- 支持单选、判断、不定项相关推荐

  1. android 流失布局,GitHub - hongyangAndroid/FlowLayout: [不再维护]Android流式布局,支持单选、多选等,适合用于产品标签等。...

    FlowLayout Android流式布局,支持单选.多选等,适合用于产品标签等. ##特色 以setAdapter形式注入数据 直接设置selector为background即可完成标签选则的切换 ...

  2. android 实现调查问卷-单选-多选

    转载请加地址:http://blog.csdn.net/jing110fei/article/details/46618229 先上效果图 个人分析,最好是用动态布局加载来实现,好了,说思路,将这整体 ...

  3. Android手游《》斗地主完整的源代码(支持单机和网络对战)

    Android手游<斗地主>完整的源代码(支持单机和网络对战)下载.一个很不错的源代码. 斗地主掌游是一个独特的国内社会斗地主棋牌游戏,之后玩家可以下载网上斗地主和全世界.掌游斗地主特点: ...

  4. uni-app - 日历选择器组件(支持日期 “范围选择“ 多选 / 支持单选日期 / 自定义默认选中时间 / 弹框式 / 支持农历 )完美兼容 H5 APP 小程序,最好用的教程完整源代码插件!

    前言 网上的教程代码非常乱且都有 BUG 存在,非常难移植到自己的项目中,本文代码干净整洁注释详细. 本文提供 弹框式日历选择器组件,支持单选.范围选择日期,全端兼容无BUG! 您只需复制粘贴,保证几 ...

  5. Android P 凹口屏支持,打造全面屏体验

    作者: Megan Potoski, Android 系统用户界面产品经理 智能手机发展至今,边框越做越窄,屏幕中横比越做越大.而凹口屏 (又称 "刘海屏") 更是成为各大设备厂商 ...

  6. Android 12来了,支持更多设备,你的应用准备好了么?

    Android 12 Beta 在5月19日的 Google I/O 大会上发布了 Android 12 的第一个 Beta 版,除了可以在 Pixel 设备上体验 Android 12 Beta 版 ...

  7. Android 手势检测实战 打造支持缩放平移的图片预览效果(下)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39480503,本文出自:[张鸿洋的博客] 上一篇已经带大家实现了自由的放大缩小图 ...

  8. 【转官方】Android ADB调试命令、支持的命令、ADB文档

    ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具. 持续更新中,欢迎提 PR 和 Issue 补充指 ...

  9. grasscutter 使用指南——Android/Windows/IOS端均已支持

    grasscutter 使用指南--Android/Windows/IOS端均已支持 前言 grasscutter是某二次元手游的开源后端,目前功能并不完整,但正在contributers正在全速开发 ...

最新文章

  1. iframe高度动态自适应
  2. Liferay例子学习,如何部署简单的jsp portlet
  3. SQL Server 兼容模式
  4. EditPlus构建轻量级编译环境
  5. 函数式编程 -- 纯函数、柯里化函数
  6. python集合set底层原理_Python进阶11_字典dict和集合set的秘密
  7. iOS label显示不同颜色的字体
  8. cacti安装后修改说明
  9. 电信光猫-华为HG8245C获取超级管理员密码
  10. dell latitude3400 笔记本QQ语音别人听不到声音
  11. python爬虫监控平台_scrapy-monitor,实现爬虫可视化,监控实时状态
  12. 港科资讯|香港科技大学委任罗康锦教授为新一任工学院院长
  13. Python内置函数、匿名函数
  14. 数字电路反相器符号_数字电路知识总结
  15. 影之刃服务器维护,《影之刃3》骨灰级玩家给大家带来一条龙攻略服务
  16. 【计算机图形学与多媒体】 2019年-中国计算机学会推荐国际学术会议和期刊目录(七)
  17. Java:如果优雅地打印出完美日志
  18. ant-design-vue select 可搜索下拉加载更多
  19. Android项目实战(十六):QQ空间实现(一)—— 展示说说中的评论内容并有相应点击事件...
  20. gsoap初始化释放_gsoap内存管理与释放

热门文章

  1. 高通camera调试
  2. oracle横向统计个数,Oracle横向求最大值
  3. java int ==_Java 位运算符和 int 类型的实现
  4. 热议|上海交大等6所“双一流”明确,博士生毕业,不再要求发表论文!
  5. 阿里云大学:使用自然语言处理进行简历筛选 笔记
  6. 最吓人的鬼故事排行榜前十名(转载)
  7. 多语言网站设计需要注意的问题
  8. 泡泡玛特2021年营收44.9亿元 同比增长78.7%
  9. iPhone 14 Pro系列传出好消息,有望实现8GB内存自由
  10. 祝福神器!微信推出“表情搜索”功能,支持合成个性化祝福表情