Intereting Posts

TextView: shadowDx / Dy / Radius in dip?

Как мы можем указать значения shadowDx / Dy / Radius TextView в dip? Прямо сейчас у меня есть:

<style name="foo"> <item name="android:shadowDx">-1</item> <item name="android:shadowDy">-1</item> <item name="android:shadowRadius">1</item> </style> 

Кажется, я не могу указать «1dip» в этих местах. Есть ли способ сделать это иначе, чем устанавливать их в коде и делать размножение плотности устройства самостоятельно?

благодаря

Solutions Collecting From Web of "TextView: shadowDx / Dy / Radius in dip?"

К сожалению, это единственный способ, извините 🙁

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

 public class TextViewShadowDips extends TextView { public TextViewShadowDips(Context context, AttributeSet attrs) { super(context, attrs); final TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.TextViewShadowDips); final float shadowRadius = attributes.getDimension(R.styleable.TextViewShadowDips_shadowRadius, 0f); final float shadowDx = attributes.getDimension(R.styleable.TextViewShadowDips_shadowDx, 0f); final float shadowDy = attributes.getDimension(R.styleable.TextViewShadowDips_shadowDy, 0f); final int shadowColor = attributes.getColor(R.styleable.TextViewShadowDips_shadowColor, 0); if (shadowColor != 0) { setShadowLayer(shadowRadius, shadowDx, shadowDy, shadowColor); } else { getPaint().clearShadowLayer(); } attributes.recycle(); } } 

Attrs.xml внутри папки ресурсов "values"

 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="TextViewShadowDips"> <attr name="shadowRadius" format="dimension"/> <attr name="shadowDx" format="dimension"/> <attr name="shadowDy" format="dimension"/> <attr name="shadowColor" format="color"/> </declare-styleable> </resources> 

Пример использования:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="wrap_content" > <my.package.name.TextViewShadowDips android:layout_width="wrap_content" android:layout_height="wrap_content" app:shadowColor="#000000" app:shadowRadius="2dip" app:shadowDx="2dip" app:shadowDy="2dip" /> </RelativeLayout> 

Как говорит Ромен, вы не можете устанавливать значения dip непосредственно в XML. Тем не менее, вы все равно можете сделать это в XML, не имея необходимости делать грязные вычисления масштабирования в своем коде.

Хитрость заключается в том, что в дополнение к папке с обычными values есть отдельные values-hdpi , values-mdpi и values-ldpi . Внутри каждого создайте отдельный styles.xml содержащий стиль для вашего текста с примененной теной.

Например, это может иметь значение в values-mdpi/styles.xml :

 <style name="my_shadow"> <item name="android:shadowDx">0.0</item> <item name="android:shadowDy">-1.0</item> <item name="android:shadowRadius">1.0</item> </style> 

И в values-hdpi/styles.xml вас тот же стиль, но со значениями, масштабируемыми для большей плотности:

 <style name="my_shadow"> <item name="android:shadowDx">0.0</item> <item name="android:shadowDy">-1.5</item> <item name="android:shadowRadius">1.5</item> </style>