Android imageview nie respektuje maxWidth?
Więc mam imageview, który powinien wyświetlać dowolny obraz, zdjęcie profilowe pobrane z Internetu. Chcę, aby ImageView skalował swój obraz, aby zmieścił się wewnątrz wysokości kontenera nadrzędnego i ustawił maksymalną szerokość 60 dip. Jeśli jednak obraz jest wysoki pod względem proporcji i nie wymaga pełnego 60 dip szerokości, szerokość obrazu powinna się zmniejszać, aby tło obrazu dobrze pasowało do obrazu.
Próbowałem tego,
<ImageView android:id="@+id/menu_profile_picture"
android:layout_width="wrap_content"
android:maxWidth="60dip"
android:layout_height="fill_parent"
android:layout_marginLeft="2dip"
android:padding="4dip"
android:scaleType="centerInside"
android:background="@drawable/menubar_button"
android:layout_centerVertical="true"/>
Ale to sprawiło, że ImageView bardzo duży z jakiegoś powodu, może użył wewnętrznej szerokości obrazu i wrap_content, aby go ustawić - w każdym razie nie respektował mojego atrybutu maxWidth.. Czy to działa tylko wewnątrz niektórych rodzajów kontenerów? Znajduje się w linii prostej...
Jakieś sugestie?2 answers
Ah,
android:adjustViewBounds="true"
Jest wymagane do działania maxWidth.
Działa!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-20 11:23:19
Ustawienie adjustViewBounds
nie pomaga, jeśli używasz match_parent
, ale obejście jest proste, niestandardowe ImageView
:
public class LimitedWidthImageView extends ImageView {
public LimitedWidthImageView(Context context) {
super(context);
}
public LimitedWidthImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public LimitedWidthImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int specWidth = MeasureSpec.getSize(widthMeasureSpec);
int maxWidth = getMaxWidth();
if (specWidth > maxWidth) {
widthMeasureSpec = MeasureSpec.makeMeasureSpec(maxWidth,
MeasureSpec.getMode(widthMeasureSpec));
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-16 18:29:05