Android: программно настроить ImageView layout_height
У меня есть ImageView в моем файле main.xml:
<ImageView
android:id="@+id/pageImage"
android:layout_width="270dp"
android:layout_height="45dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="25dp"
android:layout_marginTop="15dp"
android:scaleType="fitXY"
android:src="@drawable/pageimage" />
Мне нужно всего лишь установить программный код layout_height
на другое значение.
Кроме того, мне нужно установить значение в dp. Так что в настоящее время это 45dp, я бы хотел изменить его на другое значение в моей основной деятельности.
Я попытался выяснить, как это сделать, используя LayoutParams, но я не смог добиться успеха.
Спасибо.
Ответы
Ответ 1
Я думаю, вам нужно что-то вроде этого:
ImageView imgView = (ImageView) findViewById(R.id.pageImage);
imgView.getLayoutParams().height = 200;
Итак, сначала мы получаем ImageView из XML. Затем getLayoutParams() получает именно те параметры, которые вы можете редактировать. Вы можете установить их прямо там. То же самое для ширины и т.д.
Об устройстве (sp, dp...) Я нашел что-то здесь. Надеюсь, это поможет:
Программно использовать DIP, SP метрики
Там они упоминают, что все единицы являются пикселями. В этом примере он устанавливает минимальную ширину 20sp следующим образом:
TextView tv0 = new TextView(this);
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, getResources().getDisplayMetrics());
tv0.setMinimumWidth(px);
P.S. Вот полный код, который я использую. Надеюсь, это то, что вы хотите:
package com.example.testproject2;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ImageView;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imgView = (ImageView) findViewById(R.id.pageImage);
imgView.getLayoutParams().height = 500;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
Ответ 2
Вы можете сделать что-то вроде этого:
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(width_physical_pixels, height_physical_pixels);
imageView.setLayoutParams(layoutParams);
Но в параметрах требуется пиксель, поэтому вам нужно будет использовать формулу для преобразования пикселей в dp, например, вы можете использовать это для преобразования:
float scale = getBaseContext().getResources().getDisplayMetrics().density;
px = dp_that_you_want * (scale / 160);
Объединяя все вместе:
//Get screen density to use in the formula.
float scale = getBaseContext().getResources().getDisplayMetrics().density;
px = dp_that_you_want * (scale / 160);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(px, px);
imageView.setLayoutParams(layoutParams);
Я не знаю, это то, что вы ищете, или если это будет работать, так что дайте мне знать, если это произойдет.