R
RobNeck
Ambitioniertes Mitglied
- 3
Moinsen!
Ich habe mir ein paar eigene View gebaut, die ich gerne in einem RelativeLayout platzieren würde. Nun habe ich festgestellt, dass ich die Größe der custom views nicht mit "wrap_content" automatisch setzen kann. Stattdessen muss ich hartcodierte Werte nutzen. Das ist bei Smartphones weniger ein Problem, aber wenn ich mir das Layout dann auf einem Tablet anschaue, ist der halbe view abgeschnitten.
Habe ich bei meinem view vergessen, eine Methode zu überschreiben, oder gibt es da sonst einen Trick, wie ich wrap_content für die Skalierung der View nutzen kann?
Meine onMeasure Methode sieht wie folgt aus:
Ich habe mir ein paar eigene View gebaut, die ich gerne in einem RelativeLayout platzieren würde. Nun habe ich festgestellt, dass ich die Größe der custom views nicht mit "wrap_content" automatisch setzen kann. Stattdessen muss ich hartcodierte Werte nutzen. Das ist bei Smartphones weniger ein Problem, aber wenn ich mir das Layout dann auf einem Tablet anschaue, ist der halbe view abgeschnitten.
Habe ich bei meinem view vergessen, eine Methode zu überschreiben, oder gibt es da sonst einen Trick, wie ich wrap_content für die Skalierung der View nutzen kann?
Meine onMeasure Methode sieht wie folgt aus:
Code:
@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
final int desiredWidth = 100;
final int desiredHeight = 100;
final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
final int heightSize = MeasureSpec.getSize(heightMeasureSpec);
int width;
int height;
//Measure Width
if (widthMode == MeasureSpec.EXACTLY) {
//Must be this size
width = widthSize;
} else if (widthMode == MeasureSpec.AT_MOST) {
//Can't be bigger than...
width = Math.min(desiredWidth, widthSize);
} else {
//Be whatever you want
width = desiredWidth;
}
//Measure Height
if (heightMode == MeasureSpec.EXACTLY) {
//Must be this size
height = heightSize;
} else if (heightMode == MeasureSpec.AT_MOST) {
//Can't be bigger than...
height = Math.min(desiredHeight, heightSize);
} else {
//Be whatever you want
height = desiredHeight;
}
//MUST CALL THIS
setMeasuredDimension(width, height);
}
Zuletzt bearbeitet: