为什么我的位图图像出现在警报对话框的后面?
Why does my bitmap image appears behind the alertdialog?
代码:
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image_person = (ImageView) findViewById(R.id.dialog_imageview);
}
public void checkBox_checker(String checkerID, String checkerName, String checkerSurname, String
checkerDescription, Blob picture) throws SQLException
{
int blobLength = (int) picture.length();
byte[] bytes = picture.getBytes(1,blobLength);
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Log.d(TAG, "Checker box");
LayoutInflater factory = LayoutInflater.from(MainActivity.this);
final View alertDialog= factory.inflate(R.layout.sample, null);
image_person.setImageBitmap(bitmap);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setCancelable(true);
builder.setView(alertDialog);
builder.setTitle("Information");
builder.setMessage(message);
builder.setNegativeButton("Report", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.setPositiveButton("Enter", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.show();
}
Sample.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<ImageView
android:id="@+id/dialog_imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
我的问题是图像被插入到警告对话框的后面而不是警告对话框内。有人可以帮我解释为什么会这样吗?
我在 xml 文件中输入了图像,它确实显示在警告对话框中。所以不太清楚为什么会这样。
看起来您在布局 activity_main
中有一个名为 dialog_imageview
的单独 ImageView
。否则,activity 将无法在此处找到视图:
image_person = (ImageView) findViewById(R.id.dialog_imageview);
这将导致下面几行的空指针异常:
image_person.setImageBitmap(bitmap);
要解决所有这些问题,请从 activity_main
XML 布局中删除 dialog_imageview
。
然后,通过调用 findViewById
在膨胀的 sample
布局中找到正确的 ImageView
,而不是在 activity 中:
final View alertDialog = factory.inflate(R.layout.sample, null);
image_person = (ImageView) alertDialog.findViewById(R.id.dialog_imageview);
image_person.setImageBitmap(bitmap);
您不能在膨胀其布局之前执行“findViewById()”...
我认为您的 MainActivity 布局中有一个“dialog_imageview”,然后图像在错误的 ImageView 中更新。
你只需要移动“image_person = (ImageView)alertDialog.findViewById(R.id.dialog_imageview);”在“factory.inflate(R.layout.sample, null);”之后行。
首先,正如 Hoffman 正确指出的那样,我确实在 activty_man.xml 中复制了 ImageView。
但是,问题依然存在。
经过大量调查,我意识到我漏掉了一行代码,
之前:
image_person = (ImageView) findViewById(R.id.dialog_imageview);
After/Correction:
image_person = (ImageView) alertDialog.findViewById(R.id.dialog_imageview);
代码:
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image_person = (ImageView) findViewById(R.id.dialog_imageview);
}
public void checkBox_checker(String checkerID, String checkerName, String checkerSurname, String
checkerDescription, Blob picture) throws SQLException
{
int blobLength = (int) picture.length();
byte[] bytes = picture.getBytes(1,blobLength);
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Log.d(TAG, "Checker box");
LayoutInflater factory = LayoutInflater.from(MainActivity.this);
final View alertDialog= factory.inflate(R.layout.sample, null);
image_person.setImageBitmap(bitmap);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setCancelable(true);
builder.setView(alertDialog);
builder.setTitle("Information");
builder.setMessage(message);
builder.setNegativeButton("Report", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.setPositiveButton("Enter", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.show();
}
Sample.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<ImageView
android:id="@+id/dialog_imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
我的问题是图像被插入到警告对话框的后面而不是警告对话框内。有人可以帮我解释为什么会这样吗?
我在 xml 文件中输入了图像,它确实显示在警告对话框中。所以不太清楚为什么会这样。
看起来您在布局 activity_main
中有一个名为 dialog_imageview
的单独 ImageView
。否则,activity 将无法在此处找到视图:
image_person = (ImageView) findViewById(R.id.dialog_imageview);
这将导致下面几行的空指针异常:
image_person.setImageBitmap(bitmap);
要解决所有这些问题,请从 activity_main
XML 布局中删除 dialog_imageview
。
然后,通过调用 findViewById
在膨胀的 sample
布局中找到正确的 ImageView
,而不是在 activity 中:
final View alertDialog = factory.inflate(R.layout.sample, null);
image_person = (ImageView) alertDialog.findViewById(R.id.dialog_imageview);
image_person.setImageBitmap(bitmap);
您不能在膨胀其布局之前执行“findViewById()”... 我认为您的 MainActivity 布局中有一个“dialog_imageview”,然后图像在错误的 ImageView 中更新。
你只需要移动“image_person = (ImageView)alertDialog.findViewById(R.id.dialog_imageview);”在“factory.inflate(R.layout.sample, null);”之后行。
首先,正如 Hoffman 正确指出的那样,我确实在 activty_man.xml 中复制了 ImageView。
但是,问题依然存在。
经过大量调查,我意识到我漏掉了一行代码,
之前:
image_person = (ImageView) findViewById(R.id.dialog_imageview);
After/Correction:
image_person = (ImageView) alertDialog.findViewById(R.id.dialog_imageview);