Java 获取屏幕宽度以降低

Java 获取屏幕宽度以降低,java,android,width,screen,density-independent-pixel,Java,Android,Width,Screen,Density Independent Pixel,我想获得屏幕宽度,并将其设置为我的布局,它是水平滚动视图的子视图。我正在这样做,但它使我的布局比我想要的更宽 填充是用凹陷来定义的 Display display = getWindowManager().getDefaultDisplay(); DisplayMetrics outMetrics = new DisplayMetrics (); display.getMetrics(outMetrics); float density = getResour

我想获得屏幕宽度,并将其设置为我的布局,它是水平滚动视图的子视图。我正在这样做,但它使我的布局比我想要的更宽

填充是用凹陷来定义的

    Display display = getWindowManager().getDefaultDisplay();
    DisplayMetrics outMetrics = new DisplayMetrics ();
    display.getMetrics(outMetrics);

    float density  = getResources().getDisplayMetrics().density;    
    int padding = getResources().getDimensionPixelSize(R.dimen.padding); 
    layoutWidth = (int) ((outMetrics.widthPixels * density) - 2*padding);

此代码将返回屏幕的宽度(w)和高度(h)

DisplayMetrics dMetrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dMetrics);
float density = dMetrics.density;
int w = Math.round(dMetrics.widthPixels / density);
int h = Math.round(dMetrics.heightPixels / density);
activity是您希望获得屏幕大小的activity的实例

您必须记住:当您的设备处于横向时,w>h。当它在纵向方向w 因此,从宽度和高度,您可以检测您的设备处于什么方向

 Display display = getWindowManager().getDefaultDisplay();
 DisplayMetrics outMetrics = new DisplayMetrics ();
 display.getMetrics(outMetrics);

 float density  = getResources().getDisplayMetrics().density;
 float dpHeight = outMetrics.heightPixels / density;
 float dpWidth  = outMetrics.widthPixels / density;

另请参考:

您可以使用我的以下代码

MainActivity.java

package com.mehuljoisar.d_screensize;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


    @Override
    protected void onResume() {
        super.onResume();
        ScreenSizeUtils mScreenSizeUtils = new ScreenSizeUtils(MainActivity.this);
        ((TextView)findViewById(R.id.tvPx)).setText("wxh (px): "+mScreenSizeUtils.GET_widthxheight_px());
        ((TextView)findViewById(R.id.tvDp)).setText("wxh (dp): "+mScreenSizeUtils.GET_widthxheight_dp());

    }
}
package com.mehuljoisar.d_screensize;

import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Point;
import android.os.Build;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.WindowManager;

public class ScreenSizeUtils {

    // helper classes
    private Context mContext;
    private WindowManager mWm;
    private Display mDisplay;
    private Configuration mConfig;
    private DisplayMetrics mDisplayMetrics, mRealDisplayMetrics;

    // helper attributes
    private static final int Unknown = -255;

    private int width_px, height_px;
    private int width_dp, height_dp;


    //values
    private String widthxheight_px;
    private String widthxheight_dp;


    public ScreenSizeUtils(Context mContext) {
        this.mContext = mContext;
        init();
    }

    private void init() {
        mWm = ((WindowManager) mContext
                .getSystemService(Context.WINDOW_SERVICE));
        mDisplay = mWm.getDefaultDisplay();
        mConfig = mContext.getResources().getConfiguration();
        mDisplayMetrics = new DisplayMetrics();
        mDisplay.getMetrics(mDisplayMetrics);
        if(Build.VERSION.SDK_INT >= 17)
        {
            mRealDisplayMetrics = new DisplayMetrics();
            mDisplay.getRealMetrics(mRealDisplayMetrics);
        }
    }

    public String GET_widthxheight_px() {
        if (Build.VERSION.SDK_INT < 13) {
            width_px = mDisplay.getWidth();
            height_px = mDisplay.getHeight();
        } else {
            Point mPoint = new Point();
            mDisplay.getSize(mPoint);
            width_px = mPoint.x;
            height_px = mPoint.y;
        }
        widthxheight_px = width_px + " x " + height_px;
        return widthxheight_px;
    }

    public String GET_widthxheight_dp() {
        int real_width_px = Unknown;
        int real_height_px = Unknown;

        if (Build.VERSION.SDK_INT >= 17) {
            real_width_px = mRealDisplayMetrics.widthPixels;
            real_height_px = mRealDisplayMetrics.heightPixels;
        }
        else
        {
            //it is necessary if you haven't called it before
            GET_widthxheight_px();
        }

        height_dp = (int) (((double) ((real_height_px == Unknown) ? height_px
                : real_height_px) / mDisplayMetrics.density) + 0.5);

        if (Build.VERSION.SDK_INT >= 13) {
            width_dp = mConfig.screenWidthDp;
        } else {
            width_dp = (int) (((double) ((real_width_px == Unknown) ? width_px
                    : real_width_px) / mDisplayMetrics.density) + 0.5);
        }

        widthxheight_dp = width_dp + " x " + height_dp;
        return widthxheight_dp;
    }

}
活动\u main.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/tvPx"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tvDp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tvPx" />

</RelativeLayout>

ScreenSizeUtils.java

package com.mehuljoisar.d_screensize;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


    @Override
    protected void onResume() {
        super.onResume();
        ScreenSizeUtils mScreenSizeUtils = new ScreenSizeUtils(MainActivity.this);
        ((TextView)findViewById(R.id.tvPx)).setText("wxh (px): "+mScreenSizeUtils.GET_widthxheight_px());
        ((TextView)findViewById(R.id.tvDp)).setText("wxh (dp): "+mScreenSizeUtils.GET_widthxheight_dp());

    }
}
package com.mehuljoisar.d_screensize;

import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Point;
import android.os.Build;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.WindowManager;

public class ScreenSizeUtils {

    // helper classes
    private Context mContext;
    private WindowManager mWm;
    private Display mDisplay;
    private Configuration mConfig;
    private DisplayMetrics mDisplayMetrics, mRealDisplayMetrics;

    // helper attributes
    private static final int Unknown = -255;

    private int width_px, height_px;
    private int width_dp, height_dp;


    //values
    private String widthxheight_px;
    private String widthxheight_dp;


    public ScreenSizeUtils(Context mContext) {
        this.mContext = mContext;
        init();
    }

    private void init() {
        mWm = ((WindowManager) mContext
                .getSystemService(Context.WINDOW_SERVICE));
        mDisplay = mWm.getDefaultDisplay();
        mConfig = mContext.getResources().getConfiguration();
        mDisplayMetrics = new DisplayMetrics();
        mDisplay.getMetrics(mDisplayMetrics);
        if(Build.VERSION.SDK_INT >= 17)
        {
            mRealDisplayMetrics = new DisplayMetrics();
            mDisplay.getRealMetrics(mRealDisplayMetrics);
        }
    }

    public String GET_widthxheight_px() {
        if (Build.VERSION.SDK_INT < 13) {
            width_px = mDisplay.getWidth();
            height_px = mDisplay.getHeight();
        } else {
            Point mPoint = new Point();
            mDisplay.getSize(mPoint);
            width_px = mPoint.x;
            height_px = mPoint.y;
        }
        widthxheight_px = width_px + " x " + height_px;
        return widthxheight_px;
    }

    public String GET_widthxheight_dp() {
        int real_width_px = Unknown;
        int real_height_px = Unknown;

        if (Build.VERSION.SDK_INT >= 17) {
            real_width_px = mRealDisplayMetrics.widthPixels;
            real_height_px = mRealDisplayMetrics.heightPixels;
        }
        else
        {
            //it is necessary if you haven't called it before
            GET_widthxheight_px();
        }

        height_dp = (int) (((double) ((real_height_px == Unknown) ? height_px
                : real_height_px) / mDisplayMetrics.density) + 0.5);

        if (Build.VERSION.SDK_INT >= 13) {
            width_dp = mConfig.screenWidthDp;
        } else {
            width_dp = (int) (((double) ((real_width_px == Unknown) ? width_px
                    : real_width_px) / mDisplayMetrics.density) + 0.5);
        }

        widthxheight_dp = width_dp + " x " + height_dp;
        return widthxheight_dp;
    }

}
package com.mehuljoisar.d_屏幕尺寸;
导入android.content.Context;
导入android.content.res.Configuration;
导入android.graphics.Point;
导入android.os.Build;
导入android.util.DisplayMetrics;
导入android.view.Display;
导入android.view.WindowManager;
公共类屏幕大小{
//助手类
私有上下文;
私有窗口管理器;
专用显示器;
私有配置mConfig;
私有显示度量mDisplayMetrics、mRealDisplayMetrics;
//辅助属性
私有静态final int Unknown=-255;
专用整型宽度,高度;
专用整数宽度_dp,高度_dp;
//价值观
私有字符串宽度xheight_px;
私有字符串宽度xhu\u dp;
公共屏幕大小(上下文mContext){
this.mContext=mContext;
init();
}
私有void init(){
mWm=((WindowManager)mContext
.getSystemService(Context.WINDOW_服务);
mDisplay=mWm.getDefaultDisplay();
mConfig=mContext.getResources().getConfiguration();
mDisplayMetrics=新的DisplayMetrics();
getMetrics(mDisplayMetrics);
如果(Build.VERSION.SDK_INT>=17)
{
mRealDisplayMetrics=新的DisplayMetrics();
mDisplay.getRealMetrics(mRealDisplayMetrics);
}
}
公共字符串GET_widthxheight_px(){
如果(Build.VERSION.SDK_INT<13){
width_px=mDisplay.getWidth();
height_px=mDisplay.getHeight();
}否则{
点mPoint=新点();
mDisplay.getSize(mPoint);
宽度×px=mPoint.x;
高度×px=mPoint.y;
}
宽度x高x=宽度x+“x”+高度x;
返回宽度xhupx;
}
公共字符串GET_widthxheight_dp(){
int real_width_px=未知;
int real_height_px=未知;
如果(Build.VERSION.SDK_INT>=17){
real_width_px=mRealDisplayMetrics.widthPixels;
实际高度像素=mRealDisplayMetrics.heightPixels;
}
其他的
{
//如果你以前没有打过电话,这是必要的
获取_widthxheight_px();
}
高度(dp=(int)((double)(real)高度(px=)未知)高度(px)
:实际高度/mDisplayMetrics.密度)+0.5);
如果(Build.VERSION.SDK_INT>=13){
宽度=mConfig.screenWidthDp;
}否则{
宽度dp=(int)((双精度)((实数宽度px==未知)?宽度px
:实际宽度/mDisplayMetrics.密度)+0.5);
}
宽度x高=宽度x高+高度x高;
返回宽度xhu\u dp;
}
}
屏幕截图


我希望这会有帮助

如果要动态添加视图,为什么不使用
LayoutParams.MATCH\u PARENT
?因为HorizontalScrollView中的容器布局不能匹配\u PARENT我已经尝试过了,但也没有帮助。我的布局太宽了。我认为
int w
不包含dips中的屏幕宽度:(.如果您可以将xml和代码粘贴到设置布局宽度的位置,这会有所帮助。我使用LayoutFlator创建布局,这就是我设置宽度
容器的位置。getLayoutParams().width=width;
@user3199577:我已经发布了答案