目的のレイアウトの画像:
私は次の状況にあります:
データベースから入力されたボタンを含むグループがあります(たとえば、特定のテーブルの10個のアイテムがこのグループの10個のボタンに入力されます)-これは正常に機能します。
方法がわからない部分は次のとおりです。
このボタンが円(描画可能)として表示され、その円の中に画像(パスはデータベースから取得されます)と上記の説明のラベル(表から)が表示されるようにしたいと思います。
アイテムが1つある場合、それは画面の中央にあり、ボタンの量が増えるにつれて、円は3列のグリッド内に設定されます。
誰かがこの問題で私を助けることができますか?
異なるメソッド(RadioButtonsを使用)を試した古いバージョンでは、この例ではImageまたはdrawableはなく、アイテムはRadioGroup内のradioButtonsです。
DatBas dbc = new DatBas(Tamar_appActivity.this);
dbc.open();
SQLiteDatabase tdb = dbc.getDatabase();
String[] columns = new String[] { DatBas.KEY_ROW_B_ID,
DatBas.KEY_B_NAME };
Cursor c = tdb.query(DatBas.DATABASE_TABLE_SETTINGS, columns, null,
null, null, null, null);
int iRawBId = c.getColumnIndex(DatBas.KEY_ROW_ID);
int iBName = c.getColumnIndex(DatBas.KEY_B_NAME);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
RadioGroup radiogroup = (RadioGroup)
findViewById(R.id.bNameSelectGroup);
final Button rdbtn = new Button(this);
rdbtn.setId(iRawBId);
rdbtn.setText(c.getString(iBName));
radiogroup.addView(rdbtn);
}
dbc.close();
}
これはSpacialButton.javaコードです:
public class SpecialButton extends RelativeLayout {
public TextView text;
//public ImageView image;
public SpecialButton(Context context) {
super(context);
this.setBackgroundResource(R.drawable.cb_shape);
LayoutInflater.from(context).inflate(R.layout.cb_inner,
this, true);
text = (TextView) findViewById(R.id.textView1);
// image = (ImageView) findViewById(R.id.imageBB);
}
public SpecialButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public SpecialButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
これはcb_inner.xmlコードです:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- This will hold the image from the database -->
<ImageView
android:id="@+id/imageBB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" />
<View
android:id="@+id/anchor"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_centerInParent="true" />
<!-- This will be the label. It will be placed below the center -->
<TextView
android:id="@+id/cbTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/anchor"
android:layout_centerHorizontal="true"
android:text="TextView"
android:textColor="#000000" />
</merge>
これはMain.javaコードです:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TableLayout tl = (TableLayout) findViewById(R.id.grid);
Display display2 = getWindowManager().getDefaultDisplay();
int width = display2.getWidth();
int height = display2.getHeight();
int realSize = width / 3;
DatBas dbc = new DatBas(Tamar_appActivity.this);
dbc.open();
SQLiteDatabase tdb = dbc.getDatabase();
String[] columns = new String[] { DatBas.KEY_ROW_B_ID,
DatBas.KEY_B_NAME };
Cursor c = tdb.query(DatBas.DATABASE_TABLE_SETTINGS, columns, null,
null, null, null, null);
c.moveToFirst();
int iRawBId = c.getColumnIndex(DatBas.KEY_ROW_B_ID);
int iBName = c.getColumnIndex(DatBas.KEY_B_NAME);
int iBimage = c.getColumnIndex(DatBas.KEY_B_IMAGE_PATH);
// ic_launcher.png
int cursorSize = c.getCount();
int rows = (cursorSize / 3) + 1; // +1 so you have at least one row if the number of button is below 3
int current = 1; // starting position
for (int i = 0; i < rows; i++) {
TableRow tr1 = new TableRow(this);
tr1.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
for (int j = 0; j < 3; j++) {
if (current <= cursorSize) {
SpecialButton sb = new SpecialButton(this);
sb.text.setText(c.getString(iBName));
sb.setLayoutParams(new TableRow.LayoutParams(realSize,
realSize));
// other stuff you would do
// sb.image.getDrawable();
tr1.addView(sb);
c.moveToNext();
}
current++;
}
tl.addView(tr1);
}
dbc.close();
}