0

У меня есть этот код ниже, который создает квадрат с изображением, текстом и двумя кнопками изображения.Android linearlayouts не расширяется, как ожидалось

Это выглядит следующим образом:

enter image description here

Я хочу, чтобы это так, чтобы текст всегда в 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; 
} 
+0

Просто из любопытства, почему бы вам не использовать xroid для определения макетов? – Antrromet

+0

Я делаю это динамически для многих из них. – omega

ответ

0

Текст, попробуйте этот ответ: https://stackoverflow.com/a/2142968/2629065 он будет сворачивать текст, пока не вписывается в параметры, которые дают его.

Вы набивали верхнюю часть, которая добавляет к высоте элемента, компенсируя выравнивание силы тяжести. Удалите верхнюю прокладку и используйте запас, или снимите нижнюю часть.

Смежные вопросы