【问题标题】:Getting screen height before first display?在首次显示之前获取屏幕高度?
【发布时间】:2010-12-22 20:14:32
【问题描述】:

我有一个列表视图。我用 8 个项目填充它,这就是 G1 上的所有内容。我的一些用户说 Droid 的屏幕高度更高,因此我可能可以向 ListView 添加一两个项目以占用提供的额外空间。

如何在 UI 显示之前测量屏幕在启动时提供的可用高度?如果我看到高度可以容纳超过 8 个项目,我想再添加一到两行。

【问题讨论】:

  • 这听起来像是一条危险的道路,因为如果用户决定将他们的 G1 设置为横向模式怎么办?如果屏幕尺寸比 G1 更小,您当前的 8 个项目会太大?
  • 是的,很好的一点 - 老实说,我对这样做感到紧张,但想调查一下。我认为这可能是一个合理的猜测:在应用启动时,在纵向模式下获取屏幕高度。用它作为我的标准来确定要显示多少项目。我同意他们以横向模式启动应用程序,并拥有更多适合该方向的项目。理想情况下,我只希望有一些项目,这样当它们处于纵向模式时,所有项目都适合而不需要任何滚动,谢谢
  • 这是某种动态增长的列表吗?您总是可以只用锤子解决问题并最初加载 16 个项目。除非您正在为填充每一行做一些疯狂的事情,否则我不认为这会在速度上有明显的差异,这样在更高的分辨率下列表仍然看起来“满”,而不必担心跳过的箍丹尼尔提到的。

标签: android android-listview


【解决方案1】:

我同意上面的 cmets,但如果你真的想走这条路,试试这个:

Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();

您可以从您的主要活动中执行此操作,即从启动器启动的活动。

但是,这并没有考虑到通知栏或窗口装饰所占用的空间,因此实际上,您的空间小于宽度乘以高度。

【讨论】:

    【解决方案2】:

    这是我用得最多的代码:

    public class MainActivity extends Activity {
    
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.????????);
    
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        Constants.SCREEN_HEIGHT = dm.heightPixels;
        Constants.SCREEN_WIDTH = dm.widthPixels;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-11
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多