下面列出了android.util.TypedValue#COMPLEX_UNIT_DIP 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* 各种单位转换
* <p>该方法存在于TypedValue</p>
*
* @param unit 单位
* @param value 值
* @param metrics DisplayMetrics
* @return 转换结果
*/
public static float applyDimension(int unit, float value, DisplayMetrics metrics) {
switch (unit) {
case TypedValue.COMPLEX_UNIT_PX:
return value;
case TypedValue.COMPLEX_UNIT_DIP:
return value * metrics.density;
case TypedValue.COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case TypedValue.COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f / 72);
case TypedValue.COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case TypedValue.COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f / 25.4f);
}
return 0;
}
/**
* Converts an unpacked complex data value holding a dimension to its final floating
* point value. The two parameters <var>unit</var> and <var>value</var>
* are as in {@link TypedValue#TYPE_DIMENSION}.
*
* @param value The value to apply the unit to.
* @param unit The unit to convert from.
* @return The complex floating point value multiplied by the appropriate
* metrics depending on its unit.
*/
public static float applyDimension(@NonNull final Context context, final float value, final int unit) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
switch (unit) {
case TypedValue.COMPLEX_UNIT_PX:
return value;
case TypedValue.COMPLEX_UNIT_DIP:
return value * metrics.density;
case TypedValue.COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case TypedValue.COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f / 72);
case TypedValue.COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case TypedValue.COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f / 25.4f);
}
return 0;
}
/**
* 各种单位转换
* <p>该方法存在于TypedValue</p>
*
* @param unit 单位
* @param value 值
* @param metrics DisplayMetrics
* @return 转换结果
*/
public static float applyDimension(int unit, float value, DisplayMetrics metrics) {
switch (unit) {
case TypedValue.COMPLEX_UNIT_PX:
return value;
case TypedValue.COMPLEX_UNIT_DIP:
return value * metrics.density;
case TypedValue.COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case TypedValue.COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f / 72);
case TypedValue.COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case TypedValue.COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f / 25.4f);
}
return 0;
}
/**
* 各种单位转换
* <p>该方法存在于TypedValue
*/
public static float applyDimension(int unit, float value, DisplayMetrics metrics) {
switch (unit) {
case TypedValue.COMPLEX_UNIT_PX:
return value;
case TypedValue.COMPLEX_UNIT_DIP:
return value * metrics.density;
case TypedValue.COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case TypedValue.COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f / 72);
case TypedValue.COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case TypedValue.COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f / 25.4f);
}
return 0;
}
private static int getUnitFromString(String unitString) {
int unit = TypedValue.COMPLEX_UNIT_DIP;
if ("px".equals(unitString)) {
unit = TypedValue.COMPLEX_UNIT_PX;
} else if ("dp".equals(unitString)) {
unit = TypedValue.COMPLEX_UNIT_DIP;
} else if ("sp".equals(unitString)) {
unit = TypedValue.COMPLEX_UNIT_SP;
} else if ("pt".equals(unitString)) {
unit = TypedValue.COMPLEX_UNIT_PT;
} else if ("in".equals(unitString)) {
unit = TypedValue.COMPLEX_UNIT_IN;
} else if ("mm".equals(unitString)) {
unit = TypedValue.COMPLEX_UNIT_MM;
}
return unit;
}
/**
* 各种单位转换
* <p>该方法存在于TypedValue</p>
*
* @param unit 单位
* @param value 值
* @param metrics DisplayMetrics
* @return 转换结果
*/
public static float applyDimension(int unit, float value, DisplayMetrics metrics) {
switch (unit) {
case TypedValue.COMPLEX_UNIT_PX:
return value;
case TypedValue.COMPLEX_UNIT_DIP:
return value * metrics.density;
case TypedValue.COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case TypedValue.COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f / 72);
case TypedValue.COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case TypedValue.COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f / 25.4f);
}
return 0;
}
/**
* 各种单位转换
* <p>该方法存在于TypedValue</p>
* @param unit 单位
* @param value 值
* @param metrics DisplayMetrics
* @return 转换结果
*/
public static float applyDimension(int unit, float value, DisplayMetrics metrics) {
switch (unit) {
case TypedValue.COMPLEX_UNIT_PX:
return value;
case TypedValue.COMPLEX_UNIT_DIP:
return value * metrics.density;
case TypedValue.COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case TypedValue.COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f / 72);
case TypedValue.COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case TypedValue.COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f / 25.4f);
}
return 0;
}
public void getResources(Resources res) {
if (application != null) {
//To solve the problem that the DisplayMetrics attribute value is restored in some cases
float xdpi = mSharedPreferences.getFloat("xdpi", 0f);
if ((res.getClass().getSimpleName().contains("MiuiResources") || res.getClass().getSimpleName().contains("XResources")) && !enableOtherResources)
return;
if (xdpi > 0f && getMetrics(res).xdpi != xdpi) {
if (unit == TypedValue.COMPLEX_UNIT_DIP) {
if (enableDp)
getMetrics(res).density = xdpi;
} else {
getMetrics(res).xdpi = xdpi;
}
} else if (xdpi <= 0f) setDensity(res, unit);
}
}
/**
* Converts an unpacked complex data value holding a dimension to its final floating
* point value. The two parameters <var>unit</var> and <var>value</var>
* are as in {@link TypedValue#TYPE_DIMENSION}.
*
* @param value The value to apply the unit to.
* @param unit The unit to convert from.
* @return The complex floating point value multiplied by the appropriate
* metrics depending on its unit.
*/
public static float applyDimension(final float value, final int unit) {
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
switch (unit) {
case TypedValue.COMPLEX_UNIT_PX:
return value;
case TypedValue.COMPLEX_UNIT_DIP:
return value * metrics.density;
case TypedValue.COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case TypedValue.COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f / 72);
case TypedValue.COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case TypedValue.COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f / 25.4f);
}
return 0;
}
public Options() {
mHeaderSizes = new float[] {
1.5f, // h1
1.4f, // h2
1.3f, // h3
1.2f, // h4
1.1f, // h5
1.0f, // h6
};
mUnorderedListItem = "\u2022";
mListItemIndentUnit = TypedValue.COMPLEX_UNIT_DIP;
mListItemIndentSize = 10;
mBlockQuoteColor = 0xff0000ff;
mBlockQuoteIndentUnit = TypedValue.COMPLEX_UNIT_DIP;
mBlockQuoteIndentSize = 10;
mCodeBlockIndentUnit = TypedValue.COMPLEX_UNIT_DIP;
mCodeBlockIndentSize = 10;
mHruleColor = Color.GRAY;
mHruleUnit = TypedValue.COMPLEX_UNIT_DIP;
mHruleSize = 1;
}
public void setTextSize(int unit, int size)
{
switch (unit)
{
case TypedValue.COMPLEX_UNIT_PX:
mTextSize = size;
break;
case TypedValue.COMPLEX_UNIT_DIP:
mTextSize = dp2px(size);
break;
case TypedValue.COMPLEX_UNIT_SP:
mTextSize = sp2px(size);
break;
}
mTextPaint.setTextSize(mTextSize);
requestLayout();
invalidate();
}
public Options() {
mHeaderSizes = new float[]{
1.5f, // h1
1.4f, // h2
1.3f, // h3
1.2f, // h4
1.1f, // h5
1.0f, // h6
};
mUnorderedListItem = "\u2022";
mListItemIndentUnit = TypedValue.COMPLEX_UNIT_DIP;
mListItemIndentSize = 10;
mBlockQuoteColor = 0xff0000ff;
mBlockQuoteIndentUnit = TypedValue.COMPLEX_UNIT_DIP;
mBlockQuoteIndentSize = 10;
mCodeBlockIndentUnit = TypedValue.COMPLEX_UNIT_DIP;
mCodeBlockIndentSize = 10;
mHruleColor = Color.GRAY;
mHruleUnit = TypedValue.COMPLEX_UNIT_DIP;
mHruleSize = 1;
}
public final float getPxValue() {
switch (unit) {
case EM:
return this.value / 16.f;
case TypedValue.COMPLEX_UNIT_PX:
return this.value;
case TypedValue.COMPLEX_UNIT_SP:
return ParametersUtils.spToPx(this.value);
case TypedValue.COMPLEX_UNIT_DIP:
return ParametersUtils.dpToPx(this.value);
default:
return value;
}
}
/**
* @param unit {@link TypedValue} Not recommended COMPLEX_UNIT_PX、COMPLEX_UNIT_DIP、COMPLEX_UNIT_SP
* recommend COMPLEX_UNIT_PT
*/
private void setDensity(Resources res, int unit) {
if (res != null) {
try {
if ((res.getClass().getSimpleName().contains("MiuiResources") || res.getClass().getSimpleName().contains("XResources")) && !enableOtherResources)
return;
float xdpi = 0f;
DisplayMetrics dm = getMetrics(res);
if (dm == null) return;
switch (unit) {
case TypedValue.COMPLEX_UNIT_PT:
xdpi = dm.widthPixels / DESIGN_WIDTH * 72;
break;
case TypedValue.COMPLEX_UNIT_IN:
xdpi = dm.widthPixels / DESIGN_WIDTH;
break;
case TypedValue.COMPLEX_UNIT_MM:
xdpi = dm.widthPixels / DESIGN_WIDTH * 25.4f;
break;
case TypedValue.COMPLEX_UNIT_DIP:
xdpi = dm.widthPixels / DESIGN_WIDTH;
break;
}
SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putFloat("xdpi", xdpi);
editor.apply();
if (unit == TypedValue.COMPLEX_UNIT_DIP) {
if (enableDp)
dm.density = xdpi;
} else {
dm.xdpi = xdpi;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public Options() {
mHeaderSizes = new float[]{
1.5f, // h1
1.4f, // h2
1.3f, // h3
1.2f, // h4
1.1f, // h5
1.0f, // h6
};
mUnorderedListItem = "\u2022";
mListItemIndentUnit = TypedValue.COMPLEX_UNIT_DIP;
mListItemIndentSize = 10;
mBlockQuoteLineColor = 0xff0000ff;
mBlockQuoteIndentUnit = TypedValue.COMPLEX_UNIT_DIP;
mBlockQuoteIndentSize = 10;
mPreImageLinebreakHeight = 4;
mCodeBlockIndentUnit = TypedValue.COMPLEX_UNIT_DIP;
mCodeBlockIndentSize = 10;
mHruleColor = Color.GRAY;
mHruleUnit = TypedValue.COMPLEX_UNIT_DIP;
mHruleSize = 1;
}
public Options() {
mHeaderSizes = new float[]{
1.5f, // h1
1.4f, // h2
1.3f, // h3
1.2f, // h4
1.1f, // h5
1.0f, // h6
};
mUnorderedListItem = "\u2022";
mListItemIndentUnit = TypedValue.COMPLEX_UNIT_DIP;
mListItemIndentSize = 10;
mBlockQuoteLineColor = 0xff0000ff;
mBlockQuoteIndentUnit = TypedValue.COMPLEX_UNIT_DIP;
mBlockQuoteIndentSize = 10;
mPreImageLinebreakHeight = 4;
mCodeBlockIndentUnit = TypedValue.COMPLEX_UNIT_DIP;
mCodeBlockIndentSize = 10;
mHruleColor = Color.GRAY;
mHruleUnit = TypedValue.COMPLEX_UNIT_DIP;
mHruleSize = 1;
}
protected static int getTypeFromString(@NonNull String str) {
String[] split = str.trim().split("[0-9]");
if (split.length > 0) {
final String typeStr = split[split.length - 1];
switch (typeStr) {
case TYPE_DP:
case TYPE_DIP:
return TypedValue.COMPLEX_UNIT_DIP;
case TYPE_SP:
return TypedValue.COMPLEX_UNIT_SP;
case TYPE_PT:
return TypedValue.COMPLEX_UNIT_PT;
case TYPE_IN:
return TypedValue.COMPLEX_UNIT_IN;
case TYPE_MM:
return TypedValue.COMPLEX_UNIT_MM;
case TYPE_PX:
return TypedValue.COMPLEX_UNIT_PX;
default:
throw new IllegalArgumentException(typeStr + " is not a valid type dimension format.");
}
} else {
return TypedValue.COMPLEX_UNIT_PX;
}
}
@Test public void testToFloat() throws Exception {
resource = new DimensionResource(TypedValue.COMPLEX_UNIT_DIP, 2.0f);
DisplayMetrics metrics = new DisplayMetrics();
metrics.density = 200;
assertTrue(resource.toFloat(metrics) == 400.0f);
}
public int gettextSizeUnit() {
String value=mAttributeSet.getAttributeValue(namespace, KEY_TEXT_SIZE );
if (value==null)
return TypedValue.COMPLEX_UNIT_SP;
try{
String type=value.substring(value.length()-2, value.length());
if (type.equals("dp"))
return TypedValue.COMPLEX_UNIT_DIP;
else if (type.equals("sp"))
return TypedValue.COMPLEX_UNIT_SP;
else if (type.equals("pt"))
return TypedValue.COMPLEX_UNIT_PT;
else if (type.equals("mm"))
return TypedValue.COMPLEX_UNIT_MM;
else if (type.equals("in"))
return TypedValue.COMPLEX_UNIT_IN;
else if (type.equals("px"))
return TypedValue.COMPLEX_UNIT_PX;
}
catch(Exception e){
return -1;
}
return -1;
}
public SpinnerWidget(Context context, FormEntryPrompt prompt) {
super(context, prompt);
mItems = getSelectChoices();
spinner = new Spinner(context);
choices = new String[mItems.size()];
for (int i = 0; i < mItems.size(); i++) {
choices[i] = prompt.getSelectChoiceText(mItems.get(i));
}
// The spinner requires a custom adapter. It is defined below
SpinnerAdapter adapter =
new SpinnerAdapter(getContext(), android.R.layout.simple_spinner_item,
getChoicesWithEmptyFirstSlot(choices),
TypedValue.COMPLEX_UNIT_DIP, mQuestionFontSize);
spinner.setAdapter(adapter);
spinner.setPrompt(prompt.getQuestionText());
spinner.setEnabled(!prompt.isReadOnly());
spinner.setFocusable(!prompt.isReadOnly());
// Fill in previous answer
String s = null;
if (prompt.getAnswerValue() != null) {
s = ((Selection)prompt.getAnswerValue().getValue()).getValue();
}
if (s != null) {
for (int i = 0; i < mItems.size(); ++i) {
String sMatch = mItems.get(i).getValue();
if (sMatch.equals(s)) {
// Workaround to a really weird spinner bug that triggers onItemSelected
// in the initial selection of spinner even though no listener is set.
// https://stackoverflow.com/a/17336944/6671572
spinner.setSelection(i+1, false);
}
}
}
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
widgetEntryChanged();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
//do nothing here
}
});
addView(spinner);
}