我创建了我的应用程序,其高度和宽度以像素为单位,用于分辨率为480x800的Pantech设备.
我需要转换G1设备的高度和宽度.我认为将其转换为dp将解决问题,并为两种设备提供相同的解决方案.
有没有简单的方法将像素转换为dp?有什么建议?
我正在使用Google Design Library中新的FloatingActionButton,我遇到了一些奇怪的填充/边距问题.此图像(启用了开发人员布局选项)来自API 22.

从API 17开始.

这是XML
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_gravity="bottom|right"
android:layout_marginLeft="16dp"
android:layout_marginRight="20dp"
android:layout_marginTop="-32dp"
android:src="@drawable/ic_action_add"
app:fabSize="normal"
app:elevation="4dp"
app:borderWidth="0dp"
android:layout_below="@+id/header"/>
Run Code Online (Sandbox Code Playgroud)
为什么API 17中的FAB如此大得多?
xml android android-layout floating-action-button android-design-library
我知道DP,SP和PX之间的区别.在搜索了这个主题后,我发现没有什么能让我完全满意.也许这篇文章是重复的,但我仍然想知道从DP到PX,DP到SP,从SP到PX,从PX到SP,从SP到DP,从DP到SP的转换公式是什么?我知道一些代码可以做到这一点,但它们并不完美.
我目前正在建立一个水平的视频库.
我想制作类似的内容,只有一个视频居中,部分是上一个和下一个视频:

我首先选择了一个画廊,但它的局限性使我寻找其他东西.我想显示一个页面指示器,使用Gallery实现起来非常困难.
第二种选择是从Android兼容性库中获取ViewPager.我找到了一种方法来实现页面指示器.但现在,如何部分显示左右页面?
android gallery pager android-viewpager android-support-library
p我正在使用线性布局,并希望设置视图的最大高度.在"正常"情况下,我希望视图使用"wrap_content".然而,偶尔情况可能会将布局推向不合需要的尺寸.发生这种情况时,我想将高度限制在最大300dp.
当布局中的列表超过4个列表项时,我使用以下设置了视图的大小:
LinearLayout listLayout = (LinearLayout) dialog.findViewById(R.id.listLayout);
if(list.size() > 4){
LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 300);
listLayout.setLayoutParams(params);
}
Run Code Online (Sandbox Code Playgroud)
查看文档使我不了解所应用的度量单位.在这种情况下(dp,sp,px,...),有哪些计量单位?
运行测试,甚至将值设置为100都会使列表超出所需的高度.
请指教
我想在xamarin.android的C#代码中将dp转换为px ,但我能找到的只是android studio 中的java代码,在xamarin中有一些问题.我尝试使用类似于使用Resources而不是getResources(),我可以解决一些小问题,但是还有一些问题我找不到它们的任何等价物.这里是xamarin中的原始代码,我的代码和我的代码问题:
(从以编程方式将LayoutParams上的高度设置为与密度无关的像素)
java代码
int height = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, < HEIGHT >, getResources().getDisplayMetrics());
Run Code Online (Sandbox Code Playgroud)
C#代码
int height = (int)TypedValue.ApplyDimension(TypedValue.COMPLEX_UNIT_DIP, < HEIGHT >, Resources.DisplayMetrics);
Run Code Online (Sandbox Code Playgroud)
问题:
'TypedValue'不包含'COMPLEX_UNIT_DIP'的定义
无效的表达式术语<(>的相同错误)
当前上下文中不存在名称"HEIGHT"
(从公式px找到dp,dp到px android)
java代码
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
Run Code Online (Sandbox Code Playgroud)
C#代码
DisplayMetrics displayMetrics = Application.Context.Resources.DisplayMetrics;
int pixel = Math.Round(dp * (displayMetrics.Xdpi / DisplayMetrics.DensityDefault));
Run Code Online (Sandbox Code Playgroud)
问题
现在我实际上有两个问题.哪个代码更合适?在xamarin.android中它们的等效代码是什么?
提前致谢.
pixel pixels xamarin.android density-independent-pixel xamarin
我在Android 2.3和Android 4.1上运行我的程序,但我的应用程序的图片在android 4.1中显示得非常小:

我删除<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="14" />了manifest.xml
,我的应用程序完美地工作:

但我不想删除 <uses-sdk android:minSdkVersion="5" android:targetSdkVersion="14" />
我的问题在哪里?
我的代码摘要是:
public class MapCanvas extends ImageView
{
...
public MapCanvas(Context context)
{
super(context);
}
public MapCanvas(MainActivity context, Bundle state)
{
super(context);
this.context = context;
...
}
...
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
...
//Paint Offset X, Y, Zoom
this.paint.setColor(Color.rgb(51, 51, 51));
this.paint.setFakeBoldText(true);
this.paint.setTextSize(15);
String text = "X:" + OFFSET_X + ", Y:" + OFFSET_Y + ", Zoom:" + MapZoom.Zoom;
canvas.drawText(text, …Run Code Online (Sandbox Code Playgroud) 我使用以下方法来获取屏幕大小:
public static Point getScreenSize(Context context)
{
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
int w = wm.getDefaultDisplay().getWidth();
int h = wm.getDefaultDisplay().getHeight();
return new Point(w, h);
}
Run Code Online (Sandbox Code Playgroud)
在我的三星Galaxy s6上,此方法返回1080x1920 ...虽然我的设备的分辨率为1440x2560.
为什么?有没有更好的方法来获得适用于较新手机的屏幕分辨率?
编辑
我在服务中需要这种方法!我没有帮助的视图/活动,只有应用程序上下文!我需要REAL像素
由于一些奇怪的原因,我无法从下面的函数得到正确的输出,我知道我做了一些愚蠢的错误,但不确定,
public static int convertDpToPixel(int dp, Context context){
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dp,context.getResources().getDisplayMetrics());
return Math.round(px);
}
Run Code Online (Sandbox Code Playgroud)
而我正在调用函数 - gen_function.convertDpToPixel(R.dimen.button_left_right_margin,this);
输出是一个巨大的数字,这是不期望的,任何帮助非常赞赏.