Czy setWidth (int pixels) używa dip lub px?

Czy setWidth(int pixels) używa piksela niezależnego od urządzenia lub piksela fizycznego jako jednostki? Na przykład, czy setWidth(100) ustawia szerokość widoku a na 100 dips lub 100 pxs?

Dzięki.
Author: Francisco Alvarado, 2010-03-09

5 answers

Używa pikseli, ale jestem pewien, że zastanawiasz się, jak zamiast tego użyć dipów. Odpowiedź jest w TypedValue.applyDimension(). Oto przykład jak przekonwertować dipy na px w kodzie:

// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
 205
Author: Daniel Lew,
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
2017-11-03 14:46:09

Poprawnym sposobem uzyskania stałej liczby dipów w kodzie jest utworzenie pliku resources XML zawierającego wartości dp trochę jak:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="image_width">100dp</dimen>
    <dimen name="image_height">75dp</dimen>
</resources>

Następnie odwołaj się do zasobu w kodzie w następujący sposób:

float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));

Float, który zwróciłeś, zostanie skalowany odpowiednio do gęstości pikseli urządzenia, więc nie musisz powielać metody konwersji w całej aplikacji.

 23
Author: SDJMcHattie,
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
2014-07-10 14:36:44

Metoda setWidth(100), Ustaw 100 px jako szerokość (Nie w dp). więc możesz napotkać problemy z różną szerokością na różnych androidach phones.So użyj pomiaru w dp zamiast pikseli.Użyj poniższego kodu, aby uzyskać pomiar w dp próbki szerokości = 300px i wysokości = 400px.

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());

int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());
 5
Author: Nidhin,
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
2014-11-01 06:35:38
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;

Źródło (@Romain Guy)

 4
Author: pomber,
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
2017-05-23 12:34:37

Piksele oczywiście metoda pyta o piksele jako parametr.

 0
Author: Josnidhin,
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
2012-08-29 17:47:10