【问题标题】:Why a programatically absolute view position is not absolute?为什么以编程方式绝对视图位置不是绝对的?
【发布时间】:2019-11-07 10:44:21
【问题描述】:

我的源代码在 Kotlin 中(与 Java 完全互操作)与 Android Studio 3.4.1

我在动态创建的视图的绝对定位中遇到了一个严重的错误问题。我的相对布局是空的,没有视图。我已阅读所有与此相关的 Stack Overflow 问题,但对我没有任何帮助。

我已将代码减少到最低限度,只是为了向社区表达我的痛苦:

我的活动代码是

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val mt = this.resources.displayMetrics
        wScreen = mt.widthPixels    // 1080 pixels 
        hScreen = mt.heightPixels   // 1920 pixels
        bt =  Button(this)
        myLayout.addView(bt) // MyLayoit is relative layout ID
        bt.id = View.generateViewId()
        bt.setBackgroundColor(Color.RED)

         // % view height is 6,3% of screen heigth  
        bt.layoutParams = RelativeLayout.LayoutParams   
              (round(0.1786* wScreen).toInt(),   //193 pixels
               round(0.0633*hScreen).toInt())    // 122 pixels

       // top button is 92,7% of height screen
         bt.x = 0.0179F * wScreen //  Left position: 19 pixels
        bt.y = 0.927F * hScreen   //  Top position: 1780 pixels
    }  // On Create
}  // Main Activity

我的相对布局 XML 为空:

<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/myLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=
          "br.com.greatsolutions.paulo.yourcalcs.MainActivity">
</RelativeLayout>

模拟器的尺寸为 2392x1440,显示 30% 的高度切割更多 按钮下方的小边距。我知道,因为我把同一个按钮放在不同的位置。

我的手机尺寸是 1920x1080。它显示相同的屏幕

如果有人可以帮助我,那就太好了。我需要在我的应用中进行精确的动态定位...

更新 1: 我尝试使用 Frame Layout 而不是 Relative Layout 运行。没有成功。

更新 2:我发现了一个解决方案。这与我的预期不同,但它有效。坚持是发明之母。我没有注意到顶部的绿色小栏......

【问题讨论】:

    标签: android kotlin layout dynamic


    【解决方案1】:

    我找到了解决我痛苦的方法。这几乎是疯狂的 Internet 上的内容很少。与我的程序无关。用 JavaKotlin 编码是没有关系的。

    我的项目在styles.xmlAndroid 项目结构中的app/res/values)中有一个样式来去掉顶部带有程序标题的状态栏:

    <style name="AppTheme.NoActionBar">
            <item name="windowActionBar">false</item>
            <item name="windowNoTitle">true</item>
    </style>
    

    AndroidManifest.xmlAndroid 项目结构中的app/Manifest)中,我已经在application 标签下为下面的行重新设置了先前的主题设置

    android:theme="@style/AppTheme.NoActionBar">
    

    当我在 Java 中重新编程我的项目(可能是为了提交给社区)并运行时,我注意到程序标题再次出现在顶部,因此我的按钮在下面消失了。

    好的,没问题。我回到了 Kotlin 项目并在我的新 Java 项目中进行了上述更改。

    所以按钮出现了,但它似乎被剪掉了,就像我在 Kotlin 中的原始项目一样。

    不过,我猜:会不会是我的切割问题和这玩意有关?

    我再次搜索如何在应用程序中取出标题栏,我在 Stack Overflow 中找到了this post

    该帖子显示了我以前从未见过的 2 条新闻行。可能是... 所以我在 NoActionBar 样式中添加了 2 行。

        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
    

    事实上,这个windowFullScreen 标志完全解决了我原来的问题!!! 发生了哪些变化?带有电池电量、电话信号和其他内容的绿色小条状态从我的屏幕上消失了。这是全屏设置的效果

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 2011-03-18
      • 2021-09-29
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多