为什么程序上的绝对视图位置不是绝对的?

时间:2019-06-25 14:46:00

标签: android kotlin layout dynamic

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

我在动态创建的视图的绝对定位中存在严重的错误问题。我的相对布局是空的,没有视图。我已经阅读了与此相关的所有 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%的高度减少了 按钮下方的一小部分空白。我知道这是因为我将同一按钮放在不同的位置。

Nexus 6 API 25

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

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

更新1:我尝试使用框架布局而不是相对布局来运行。没有成功。

更新2:我已经找到了解决方案。我期望的与众不同,但是可以。坚持不懈是发明之母。我没有注意到绿色的小顶部栏...

1 个答案:

答案 0 :(得分:0)

我已经找到了解决我痛苦的办法。这几乎是疯狂的事情 在 Internet 上几乎没有涉及。与我的程序无关。如果使用 Java Kotlin 进行编码,则没有关系。

我的项目在styles.xml中具有样式(在 Android项目结构中为app/res/values ),以摆脱状态栏,其程序标题位于顶部:

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

AndroidManifest.xml(在 Android项目结构中的app/Manifest )中,我已在应用程序标记下添加了这一行

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

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

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

因此,按钮出现了,但它被切掉了,就像我在 Kotlin 中的原始项目一样。

但是,我猜:这是因为我的切割问题与此相关吗?

我再次搜索如何在应用程序中删除标题栏,并且在 Stack Overflow 中发现了this post

该帖子显示了我从未见过的2条新闻专线。也许... 因此,我在NoActioBar样式中添加了2行。

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

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

Now it's ok!