Android: установите ImageView layout_height программно

Поздний ответ:)

Я бы сделал что-то вроде этого:

from time import sleep

print('Please provide input in 20 seconds! (Hit Ctrl-C to start)')
try:
    for i in range(0,20):
        sleep(1) # could use a backward counter to be preeety :)
    print('No input is given.')
except KeyboardInterrupt:
    raw_input('Input x:')
    print('You, you! You know something.')

Я знаю, что это не одно и то же, но многие проблемы реальной жизни могут быть решены таким образом. (Мне обычно нужен тайм-аут для ввода пользователем, когда я хочу, чтобы что-то продолжало работать, если пользователь не существует в данный момент.)

Надеюсь, это по крайней мере частично помогает. (Если кто-нибудь все это прочитает :))

21
задан Tobias Reich 11 August 2012 в 02:01
поделиться

2 ответа

Я думаю, вы хотите что-то вроде этого:

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;
    }
}
57
ответ дан Tobias Reich 11 August 2012 в 02:01
поделиться

Вы можете сделать что-то вроде этого:

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);

Я не знаю, если это то, что вы ищете, или это сработает, поэтому дайте мне знать, если это так ,

12
ответ дан 0gravity 11 August 2012 в 02:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: