【问题标题】:ImageButton Property CheckImageButton 属性检查
【发布时间】:2011-10-30 15:38:53
【问题描述】:

我有一个 ImageButton,单击它会显示一个对话框,用户可以在其中从相机拍照或从图库中选择。在从任一来源选择图像时,我将该 ImageButton 的位图设置为像这样选择的图像

SelectedPhoto = BitmapFactory.decodeFile(selectedImagePath);
DisplayPhoto.setImageBitmap(SelectedPhoto);

现在,当有人已经选择了一张图片并再次单击该图片时,我想显示一个不同的对话框,其中包含第三个选项“删除照片”。

我应该检查图像按钮的什么属性以及对照什么?

XML 中的图像按钮

<ImageButton
                android:id="@+id/DisplayPhoto"
                android:layout_width="95dip"
                android:layout_height="95dip"
                android:layout_marginRight="8dip"
                android:background="@drawable/signup_photo_selector" android:scaleType="centerCrop" />

ImageButton 背景 XML

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/signup_form_photo_selected" android:state_pressed="true"/>
    <item android:drawable="@drawable/signup_form_photo"/>
</selector>

【问题讨论】:

    标签: android background android-alertdialog imagebutton


    【解决方案1】:

    imgButton.getDrawable() 是否可以工作,因为如果没有为图像按钮分配可绘制对象,它会返回 null?

    如果没有,或者您不想获取整个可绘制对象只是为了查看它是否存在,则可以使用标签。 imgButton.setTag(object) 允许您在 imagebutton 中存储任何对象...每次设置其背景时,您都可以标记一个标识其背景是否已设置的值。如果有用,您甚至可以使用不同的值来区分是使用相机还是从图库设置背景。当您想查看图像按钮是否有背景时,请使用 imgButton.getTag() 来检索对象。

    编辑。以下是使用 setTag 和 getTag 的方法。我将使用 Integer 对象作为 ImageButton 的标记,其中值 0 表示未设置背景,值 1 表示已设置背景。如果你想让代码更清晰一点,你可以使用枚举或最终变量,但使用 Integer 可以作为示例。

    public class MainActivity extends Activity, implements OnClickListener {
      private ImageButton imgButton;
    
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        imgButton = (ImageButton)findViewById(R.id.imgID);
        imgButton.setTag(new Integer(0)); // no background
        ...
      }
    
      public void onClick(View view) {
        ImageButton ib = (ImageButton)view;
        int hasBackground = ib.getTag().intValue();
    
        if(hasBackground==0) {
          // imagebutton does not have a background. do not include remove option
          ...
        } else {
          // imagebutton has a background. include remove option
        }
      }
    }
    

    【讨论】:

    • getDrawble 唯一的问题是已经在分配背景,所以我需要针对特定​​文件验证它.. 然后我猜。我会尝试 setTag 并返回.. 这似乎更容易
    • 你能给我一个使用 setTag() 和 getTag() 的例子吗,由于某种原因我无法弄清楚
    • 我收到一个错误“对象类型的方法 intValue() 未定义”
    • 没问题...我对 inValue 错误的错误... getTag() 返回一个需要在使用 intValue 之前转换为整数的对象。所以,“整数 temp = (Integer)ib.getTag(); int hasBackground = temp.intValue();”会工作的。
    • 我正在使用 android 学习 java,所以我觉得这有点令人困惑:P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多