我已经搜索过并找到了非常多的答案,但没有一个会显示它们是如何插入到活动中的。
我的活动有一个tabsadapter和viewpager(fragmentpageradapter)。而已。我已将其设置为对话框,如此
<style name="Theme.PopupTheme" parent="android:Theme.Holo.Light.Dialog">
<item name="android:windowIsFloating">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowSoftInputMode">stateAlwaysHidden</item>
<item name="android:windowActionModeOverlay">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">false</item>
<item name="android:windowActionBar">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:padding">2sp</item>
<item name="android:divider">@drawable/transparent</item>
现在,这个工作正常,只是它占据了显示器的全尺寸,侧面和底部几乎没有任何透明度。此活动没有布局,只有viewpager xml
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
因此我依赖于以编程方式调整应用程序的大小。我发现我只能通过设置像素来管理这个(我的技术水平)。如果它适用于某个设备,它看起来不错,但是与我的S3相比,我的Nexus 10上的应用看起来很糟糕,反之亦然,这取决于我设置的像素数量。
如何以dip编程方式执行此操作?
答案 0 :(得分:0)
我认为没有办法直接在dip中设置它。
您可以使用此方法将dip转换为px,并使用结果调整视图大小。
private static float scale = 0;
...
public static int dps2pixels(int dps, Context context) {
if (0 == scale) {
scale = context.getResources().getDisplayMetrics().density;
}
return (int) (dps * scale + 0.5f);
}
答案 1 :(得分:0)
有一个名为TypedValue.applyDimensions(int, float, DisplayMetrics)
的现有实用程序方法可以执行此操作。
以下是如何使用它:
// returns the number of pixels for 123.4dip
int value = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
(float) 123.4, getResources().getDisplayMetrics());
您可以使用其他类型的列表,包括我在上面链接的页面中找到的COMPLEX_UNIT_SP, COMPLEX_UNIT_PT
。如果排除(int)类型转换,则会得到浮点数。
我遇到了同样的问题,并通过探索代码找到了这个。
答案 2 :(得分:0)
以下代码是按照屏幕尺寸以progamatically方式添加进度条。也许你可以从这段代码中得到一些提示:
mProgressBar = (ProgressBar) findViewById(R.id.progress);
DisplayMetrics metrics = this.getResources().getDisplayMetrics();
int displayWidth = metrics.widthPixels;
int displayHeight = metrics.heightPixels;
int width = 0;
int topMargin = 0;
int leftRightMargin = 0;
float deviceWidth = (float)displayWidth/metrics.xdpi;
float perct = deviceWidth*76/100;
float finalWidth = perct*metrics.xdpi;
float deviceHeight = displayHeight/metrics.ydpi;
if(metrics.density == 1)
perct = deviceHeight*16/100;
else if(metrics.density == 2)
perct = deviceHeight*20/100;
else if(metrics.density == 1.5)
perct = deviceHeight*18/100;
float finaltopMargin = perct*metrics.ydpi;
perct = deviceWidth*12/100;
float finalLeftMargin = perct*metrics.xdpi;
width = (int)finalWidth;
topMargin = (int)finaltopMargin;
leftRightMargin = (int)finalLeftMargin;
android.widget.RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) new android.widget.RelativeLayout.LayoutParams(width, width);
//params.setMargins(leftRightMargin, topMargin, 0, 0);
mProgressBar.setLayoutParams(params);
答案 3 :(得分:0)
将像素转换为倾角,反之亦然,然后根据屏幕大小应用于计算。试试这个,它应该有所帮助:
Pixel to dip:
float scale = context.getResources().getDisplayMetrics().density;
int pixel = (int) (pixel * scale + 0.5f);
倾向于像素:
int dip = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip,
getApplicationContext().getResources()
.getDisplayMetrics());