以编程方式合并单选按钮和图像视图

时间:2014-09-02 13:41:01

标签: android android-imageview android-radiogroup android-radiobutton

我想用单选按钮显示图像并用无线电组显示,因为用户可以通过阅读文本和查看图像来选择选项。我怎样才能做到这一点?

以下是创建单选按钮的代码以及动态图像视图,但是当我单击单选按钮选择它时,这些是在单选按钮组中创建它显示错误,因为图像视图无法转换为单选按钮,这使得作为收音机组中的孩子的图像视图也是无效的,但显示完美。

public RadioGroup showNationalCan(RadioGroup rg,Context context,ImageView iv,String voterNA){

    //candidate address  as punjab kpk etc

    if(conn==null){

    }
    try{
        RadioButton rb;
        Statement st=conn.createStatement();
        ResultSet rs=st.executeQuery("select * from AM_NATIONAL where ca_na=N'"+voterNA+"'");
        while (rs.next()) {
            rb=new RadioButton(context);
            rb.setTextColor(Color.BLACK);
            rb.setId(rs.getInt(1));
            rb.setText(rs.getString(2)+"\n"+rs.getString(3)+"\n");

            iv=new ImageView(context);
            byte[] photo=rs.getBytes(4);
            Bitmap bitmap;
            bitmap=BitmapFactory.decodeByteArray(photo, 0, photo.length);
            iv.setImageBitmap(bitmap);
            iv.setEnabled(false);


            rg.addView(iv);
            rg.addView(rb);
        }
        rs.close();
        st.close();

    } catch (SQLException e){
        e.printStackTrace();
    }
    return rg;
}

2 个答案:

答案 0 :(得分:2)

您可以通过drawableRight属性设置图像。您将从思考链接获得更多详细信息。

http://developer.android.com/reference/android/widget/TextView.html#attr_android:drawableRight

<RadioButton
        android:id="@+id/radio0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:drawableRight="@drawable/ic_launcher"
        android:text="A" >
    </RadioButton>

您可以使用它来动态添加单选按钮。

RadioGroup rgp= (RadioGroup) findViewById(R.id.radiogroup);
        RadioGroup.LayoutParams rprms;

        for(int i=0;i<3;i++){
              RadioButton radioButton = new RadioButton(this);
              radioButton.setText("new"+i);
              radioButton.setId(i);
              radioButton.setChecked(true);
              radioButton.setCompoundDrawables(drwable_left, drwable_top, drwable_right,                 drwable_bottom);
              rprms= new RadioGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
              rgp.addView(radioButton, rprms);
        } 

您可以在setCompoundDrawables

中设置位图
setCompoundDrawables(new BitmapDrawable(your_left_bitmap), new BitmapDrawable(your_top_bitmap), new BitmapDrawable(your_right_bitmap), new BitmapDrawable(your_bottom_bitmap));

更新:

 Bitmap drawable = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);

              radioButton.setCompoundDrawables(new BitmapDrawable(drawable), new BitmapDrawable(drawable), new BitmapDrawable(drawable), new BitmapDrawable(drawable));

答案 1 :(得分:0)

这是我自己的答案,现在工作绝对完美。我在这里回答是因为其他人能够做到这一点并能够直接从外部数据库设置图像,如SQL。

rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                // TODO Auto-generated method stub
                for(int i=0; i<rg.getChildCount();i++)
                {
                    RadioButton rbtn=(RadioButton)rg.getChildAt(i+1);
                    if(rbtn.getId()==checkedId)
                    {
                        serial=rbtn.getId();
                        flag=true;
                        return;
                    }
                    else
                    {
                        rbtn.setChecked(false);
                    }
                }

            }
        });

问题在于,无线电组将图像视图作为子视图,并且不会将其作为单选按钮单击。我只是用i + 1递增i,因为它每次都会得到单选按钮。