Вытянуть нужный dimension

Ответить
Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Вытянуть нужный dimension

Сообщение rezak90 » 26 фев 2013, 00:16

Добрый вечер/ночь/утро/день :)
Вот такая вот проблемка. Есть ресурсник:

Код: Выделить всё

    <dimen name="dp">10dp</dimen>
    <dimen name="sp">10sp</dimen>
Если вытаскивать ресурсник как

Код: Выделить всё

getResources().getDimension(R.dimen.dp);
getResources().getDimension(R.dimen.sp);
то вернётся 15.0 так как он налету конвертирует все значение в пиксели, мне же нужны эти значения в том виде как они лежат (то есть что бы возвращалось 10, а величину я потом сам подставлю). Гугл и стек ничего толкового не дали, та и не долго я искал, но наткнулся на одну идею доставать их как стринги, а потом уже парсить. Конечно небольшой велосипед, но не такой уж громадный что бы поднимать панику. Собственно вот:

Код: Выделить всё

private static final String	PATTERN_REGEXP	= "[0-9]*\\.?[0-9]";
		
		public static float getDimen(Resources resources, int resName)
		{
			float value = 0;
			String sName = null;
			try {
				sName = resources.getString(resName);
				Pattern pattern = Pattern.compile(PATTERN_REGEXP);
				Matcher matcher = pattern.matcher(sName);
				if (matcher.find()) {
					value = Float.valueOf(matcher.group());
				}
			} catch (NumberFormatException e) {
				
			} catch (NotFoundException e) {
				
			} catch (PatternSyntaxException e) {
				
			} catch (NullPointerException e) {
				
			}
			return value;
		}
Но вопрос мой состоит в следующем: неужели так глупо и не предусмотрено вытянуть значения в изначальном виде (тогда зачем их хранить там)? Я понимаю что обязательно где то что то должно быть, но даже такой подход всё равно не помогает:

Код: Выделить всё

TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, getResources().getDimension(R.dimen.sp), getResources().getDisplayMetrics())
так как он вытаскивает уже в пикселях и в итоге всё равно получается в sp не та цифра.
R.id.team
Политика на форуме запрещена

Аватара пользователя
MeTeOpA
Сообщения: 85
Зарегистрирован: 07 мар 2012, 12:50

Re: Вытянуть нужный dimension

Сообщение MeTeOpA » 28 фев 2013, 12:13

- low (ldpi) = 0,75
- medium (mdpi) = 1
- tv (tvdpi) = 1,33
- high (hdpi) = 1,5
- extra high (xhdpi) = 2

float x =1.5 // Если ScreenDensity - high;
float dimen = Integer.parseInt(getResources().getDimension(R.dimen.dp)) / x;

http://startandroid.ru/ru/materialy/pam ... nsity.html

Ответить