このトピックについて多くの質問があります。しかし、私はまだ助けが必要です。 TableLayout
に私のImageView
が等しいと表示されたいのですが、width
とheight
です。しかし、さまざまなデバイスで私はこれを行うことができませんでした。Android - ウェブサービスからの画像が異なるデバイスで異なるサイズを持っています
ここではURL
をAsyncTask
に、そしてImageView
をonPostExecute
に設定して画像を取得します。ここで
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
// set the imageview
bmImage.setImageBitmap(result);
}
は私のImageViewのが
<?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"
android:paddingRight="10dp"
android:paddingEnd="10dp"
android:layout_marginRight="10dp"
android:layout_marginEnd="10dp"
android:paddingBottom="10dp"
android:id="@+id/mylayout"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/image"
android:clickable="true"
android:background="@drawable/border"/>
<TextView
android:layout_width="match_parent"
android:layout_height="75dp"
android:maxLines="4"
android:id="@+id/text"
android:layout_below="@+id/image"
android:layout_alignEnd="@+id/image"
android:layout_alignRight="@+id/image"
android:clickable="true"
android:textSize="18sp"
android:background="#e3e3e3"
android:paddingTop="10dp"
android:gravity="center_vertical"
/>
</RelativeLayout>
に位置し、私のXMLファイル(news.xml)である私が側、のようなTableRow
の内側に、私はTableLayout
を作成し、(上記の)View
を見つけることができると考えました(ビューは上にあります)
これを行うには、画面の幅を取得し、paddings
を減算し、2で割り、その幅をImageView
に与えて、すべての画像に対して同じサイズを得ることができますeビュー。ここで
は私のコードは、私は自分の携帯電話に完璧な結果を得た、
DisplayMetrics metrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
screenWidth = metrics.widthPixels;
tableLayout = (TableLayout) view.findViewById(R.id.tableLayout);
Log.e("screenwidth",":"+screenWidth);
// here is my paddings converted to pixel and will be subtracted from screen width
int pixValue = (int) (20 * Resources.getSystem().getDisplayMetrics().density);
int imageWidthPix = (screenWidth - pixValue)/2;
Log.e("imageWidthPix ",":"+imageWidthPix);
for (int i = 0; i < categoryNews.get(myString).size(); i++) {
if (i % 2 == 0) {
tr = new TableRow(getActivity());
tableLayout.addView(tr);
}
//here is where my ImageView layout (news.xml)
View oneNews = inflater.inflate(R.layout.news, null);
ImageView imageView = (ImageView) oneNews.findViewById(R.id.image);
TextView textView = (TextView) oneNews.findViewById(R.id.text);
//here I set the width as I want
imageView.setLayoutParams(new RelativeLayout.LayoutParams(imageWidthPix, RelativeLayout.LayoutParams.WRAP_CONTENT));
String imagePath = "http://my.url.com/" + categoryNews.get(myString).get(i).getImagePath();
new DownloadImageTask(imageView,getActivity().getApplicationContext())
.execute(imagePath);
です。しかし、異なる画面サイズを持つ別のデバイスでは、ImageView
に上下にスペースがあります。私は9つのパッチチャンクを変換してビットマップに変換しようとしましたが、違いはありませんでした。 Webサービスから画像を取得できない場合は、他の解像度画像をmipmap-hpdi
、mipmap-mdpi
などのフォルダに入れてもエラーは発生しません。しかし、画像を動的に取得しているので、どのようにしてImageView
の画面幅の半分が得られるのですか? ありがとうございます。ここで
レイアウトには2つのものしかありません。 –
はい、私のnews.xmlには、画像ビューとテキストビューが1つあり、質問の中で見ることができます。 – Hilal