ユーザーがフォームで質問に答えるプロジェクトがあります。通常のバーの代わりにドットを使用して、(ダイアログではなく) 水平の進行状況バーを実装する必要があります。
ユーザーが質問に答えると、その特定の質問のドットの色が変わります。これは可能ですか?Sherlock ActionBar で API 16 (ターゲット) と API 7 (最小) を使用しています
ユーザーがフォームで質問に答えるプロジェクトがあります。通常のバーの代わりにドットを使用して、(ダイアログではなく) 水平の進行状況バーを実装する必要があります。
ユーザーが質問に答えると、その特定の質問のドットの色が変わります。これは可能ですか?Sherlock ActionBar で API 16 (ターゲット) と API 7 (最小) を使用しています
多数の質問がない場合は、複数の ImageView を使用してドットを表すだけで十分な場合があります。XML の例:
<RelativeLayout
android:id="@+id/dotsL"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:orientation="vertical" >
<ImageView
android:id="@+id/dot1"
android:layout_width="5dp"
android:layout_height="5dp"
android:layout_marginTop="5dp"
android:background="@drawable/circle_white" >
</ImageView>
<ImageView
android:id="@+id/dot2"
android:layout_width="5dp"
android:layout_height="5dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/dot1"
android:background="@drawable/circle_white" >
</ImageView>
<ImageView
android:id="@+id/dot3"
android:layout_width="5dp"
android:layout_height="5dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/dot2"
android:background="@drawable/circle_white" >
</ImageView>
<ImageView
android:id="@+id/dot4"
android:layout_width="5dp"
android:layout_height="5dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/dot3"
android:background="@drawable/circle_white" >
</ImageView>
<ImageView
android:id="@+id/dot5"
android:layout_width="5dp"
android:layout_height="5dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/dot4"
android:background="@drawable/circle_white" >
</ImageView>
</RelativeLayout>
Java では:
mDots = new ImageView[5];
mDots[0] = (ImageView) rootView.findViewById(R.id.dot1);
mDots[1] = (ImageView) rootView.findViewById(R.id.dot2);
mDots[2] = (ImageView) rootView.findViewById(R.id.dot3);
mDots[3] = (ImageView) rootView.findViewById(R.id.dot4);
mDots[4] = (ImageView) rootView.findViewById(R.id.dot5);
ユーザーが質問に答えると、次のようになります。
mDots[questionNumber].setBackgroundDrawable(getResources().getDrawable(R.drawable.circle_green));
注: このアプローチでは、対応するドローアブルが必要です。
XML:
<LinearLayout
android:id="@+id/image_layout"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical">
写真を動的に追加して非表示にし (質問の総数に基づいて)、layout_weight を 1 に設定したので、各「ドット」は同じサイズになります。
ImageView[] images = new ImageView[totQuestions];
LinearLayout imageLayout = (LinearLayout) findViewById(R.id.image_layout);
ImageView image;
LinearLayout.LayoutParams layoutParams;
for(int i = 0; i < totQuestions; i++){
image = new ImageView(this);
layoutParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.0f);
image.setLayoutParams(layoutParams);
image.setBackgroundDrawable(getResources().getDrawable(R.drawable.circle_green));
image.setVisibility(View.INVISIBLE);
images[i] = image;
imageLayout.addView(image);
}
各回答後に写真を表示:
imageLayout.getChildAt(questionNr).setVisibility(View.VISIBLE); //starting at 0
slezadavが提案したことを改善しました。
Android フレームワークには、すでに ProgressBar ウィジェットが含まれています。これはすべてのタイプのレイアウトで機能し、ダイアログに限定されません。それを使用し、独自のドット ドローアブルで android:progressDrawable または android:indeterminateDrawable プロパティを指定するのが最も簡単な解決策です。詳細については、ドキュメントを参照してください。