У меня есть этот код ниже, который создает квадрат с изображением, текстом и двумя кнопками изображения.Android linearlayouts не расширяется, как ожидалось
Это выглядит следующим образом:
Я хочу, чтобы это так, чтобы текст всегда в 1 строке. Ширина квадрата должна расширяться, поэтому он включает полный текст. На изображении текст обрезается. Две маленькие кнопки (информация и настройки) должны находиться в углах квадрата. Также есть другая проблема, текст не вертикально центрирован, и это должно быть.
Я не могу заставить его выглядеть правильно. Кто-нибудь знает, как это исправить?
Благодаря
public static LinearLayout createNodeWrapper(Activity context, Fish fish) {
ImageView imageview = createImageView(context, fish);
TextView nametv = createNameView(context, fish.getName());
ImageButton info = createButton(context, R.drawable.ic_action_info);
ImageButton settings = createButton(context, R.drawable.ic_action_settings);
LinearLayout namewrapper = createNameWrapper(context);
namewrapper.addView(info);
namewrapper.addView(nametv);
namewrapper.addView(settings);
LinearLayout contentwrapper = createContentWrapper(context, fish);
contentwrapper.addView(imageview);
contentwrapper.addView(namewrapper);
LinearLayout fullwrapper = createFullWrapper(context, fish);
fullwrapper.addView(contentwrapper);
return fullwrapper;
}
private static ImageView createImageView(Context context, Fish fish) {
ImageView imageview = new ImageView(context);
LinearLayout.LayoutParams params = fish.getImageParams();
params.gravity = Gravity.CENTER;
params.setMargins(20, 20, 20, 20);
imageview.setLayoutParams(params);
imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);
return imageview;
}
private static TextView createNameView(Context context, String name) {
TextView nametv = new TextView(context);
nametv.setText(name);
nametv.setTextAppearance(context, R.style.node);
nametv.setPadding(10, 0, 10, 10);
nametv.setGravity(Gravity.CENTER);
nametv.setSingleLine(true);
LinearLayout.LayoutParams textparams = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f);
textparams.gravity = Gravity.CENTER;
nametv.setLayoutParams(textparams);
return nametv;
}
private static ImageButton createButton(Context context, int resId) {
ImageButton imageButton = new ImageButton(context);
imageButton.setPadding(0, 0, 0, 0);
LinearLayout.LayoutParams imageparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
imageparams.gravity = Gravity.CENTER;
imageButton.setLayoutParams(imageparams);
imageButton.setBackgroundResource(resId);
return imageButton;
}
private static LinearLayout createNameWrapper(Context context) {
LinearLayout wrapper = new LinearLayout(context);
wrapper.setOrientation(LinearLayout.HORIZONTAL);
wrapper.setPadding(0, 0, 0, 0);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
wrapper.setLayoutParams(params);
return wrapper;
}
private static LinearLayout createContentWrapper(Context context, Fish fish) {
LinearLayout wrapper = new LinearLayout(context);
wrapper.setOrientation(LinearLayout.VERTICAL);
wrapper.setPadding(3, 0, 3, 3);
LinearLayout.LayoutParams params = fish.getParams();
wrapper.setLayoutParams(params);
wrapper.setMinimumWidth(MIN_NODE_WIDTH);
return wrapper;
}
private static LinearLayout createFullWrapper(Context context, Fish fish) {
LinearLayout wrapper = new LinearLayout(context);
wrapper.setBackgroundResource(R.drawable.category_bg);
wrapper.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams params = fish.getParams();
params.setMargins(10, 10, 10, 10);
wrapper.setLayoutParams(params);
return wrapper;
}
Просто из любопытства, почему бы вам не использовать xroid для определения макетов? – Antrromet
Я делаю это динамически для многих из них. – omega