【问题标题】:Text visible on the phone but not in Genymotion emulator文字在手机上可见,但在 Genymotion 模拟器中不可见
【发布时间】:2015-02-21 14:17:44
【问题描述】:

我通过在线性布局中为视图分配权重来为视图分配空间。可以看出textView的高度是(屏幕高度*5)/12。

布局的xml文件如下-

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.greenloop.numbers.Counting_Ten"
android:orientation="vertical"
tools:ignore="MergeRootFrame"
android:background="#FFA500">

<RelativeLayout android:id="@+id/rel_number_fragment"
    android:layout_weight="5"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:background="#800000">

   <TextView
        android:id="@+id/number"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:clickable="true"
        android:onClick="onClick"
        android:background="#800080"/>

</RelativeLayout>

<FrameLayout
    android:id="@+id/image_frame"
    android:layout_weight="6"
    android:layout_width="match_parent"
    android:layout_height="0dp">
</FrameLayout>

<fragment android:name="com.example.Navigation_Buttons"
    android:id="@+id/button_fragment"
    android:layout_weight="1"
    android:layout_width="match_parent"
    android:layout_height="0dp"/>

 </LinearLayout>

我已将java文件中的textsize设置为

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int screen_height = displaymetrics.heightPixels;

text_size = (int) (((screen_height*5.0)/12.0));
textview.setTextSize(TypedValue.COMPLEX_UNIT_PX,text_size);

现在的问题 -:我已经在手机上运行了这个,一切都很好。文本大小与文本视图一样大。但是当我在 10 英寸平板电脑和 Nexus 5 的 GENYMOTION 模拟器上运行相同的东西时,Logcat 显示 - 字体太大,无法放入缓存。宽度、高度 = 175、527。我无法弄清楚这一点。可以是因为字体风格不同?

【问题讨论】:

  • 您可以使用sdk\tools下的monitor.bat来检查视图的层次结构是否正确。
  • 会不会是字体样式的不同?
  • 也许,你可以给个更小的尺寸看看它是否会显示
  • 如果我把它设置得太低,比如 1/12 而不是 5/12 * screen_height 它会显示出来。另外,我通过 java 设置字体样式进行了检查,但结果仍然相同 - 在手机上工作但在模拟器上没有

标签: android layout emulation text-size


【解决方案1】:

最后我解决了这个问题。

android:layout_height="wrap_content" 而不是 match_parent

并通过添加这个 ->

textview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

问题解决了

【讨论】:

    【解决方案2】:

    任何android视图参数都是设备的dpipx之间的关系,而不仅仅是px,所以,由于dpi的变化 strong> 不同设备之间的值,widthheight 的返回值有时需要导出来匹配这种关系,例如 Nexus 设备通常具有 dpi 320,而您测试代码的其他设备可能是 160240,所以,你必须将检索到的widthheight转换为dip,这样你在处理不同的设备时可以有相同的比率,这发生在下面公式:

    // getting it regularly like you do
    int screen_height = displaymetrics.heightPixels;
    // convert the value
    Resources res = getResources();
    int new_screen_height = (int)(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, screen_height, res.getDisplayMetrics()));
    // then do whatever you want with the new_screen_height
    

    有关更多信息,请参阅this answer,它声明 dpi 会影响像素大小。

    【讨论】:

    • 先生,但是当我设置 textView 的文本大小时,我使用的是像素而不是 dp。 textview.setTextSize(TypedValue.COMPLEX_UNIT_PX,text_size);
    • 这与使用 PX、SP 或 DIP 设置无关。这是因为屏幕宽度在 Nexus 设备中将是一个巨大的价值,而在其他设备中它将是一个合理的价值,所以,为了使您的价值都合理,进行这种转换。
    • 先生,您能否进一步解释一下,或者请我参考一个页面/主题
    • 请看我最后一个回答中的链接
    • 先生,我是android新手,也许这就是我无法理解你的原因。但是,我已经知道 dpi 会影响像素大小。我无法弄清楚 - 假设有任何高度为 12 像素的屏幕。现在,我的文本视图的高度将是 (5/12)*12 = 5 像素。现在我将 textsize 设置为 5 像素,这应该完全没问题。感谢您的努力。
    猜你喜欢
    • 2021-02-19
    • 2021-02-15
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    相关资源
    最近更新 更多