Почему программно абсолютная точка зрения не является абсолютной? - PullRequest
0 голосов
/ 25 июня 2019

Мой исходный код находится в 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%Высота среза больше небольшого поля под кнопкой.Я знаю это, потому что я помещаю одну и ту же кнопку в другое положение.

Nexus 6 API 25

Размер моего мобильного телефона составляет 1920x1080.Он показывает тот же экран

Будет очень приятно, если кто-нибудь сможет мне помочь.Мне нужно точное динамическое позиционирование в моем приложении ...

Обновление 1: Я пытаюсь запустить, используя Frame Layout вместо Relative Layout .Безуспешно.

Обновление 2: Я нашел решение.Это отличается от того, что я ожидал, но это работает.Настойчивость - мать изобретения.Я не заметил маленький зеленый верхний бар ...

1 Ответ

0 голосов
/ 26 июня 2019

Я нашел решение для моих страданий.Это что-то почти сумасшедшее и очень мало решаемое в Интернет .Нет ничего общего с моей программой.Это не связано, если кодируется в Java или Kotlin .

Мой проект имел стиль в styles.xml (app/res/values в Структура проекта Android ), чтобы избавиться от строки состояния с заголовком программы вверху:

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

И в AndroidManifest.xml (app/Manifest в структура проекта Android ) я добавил эту строку под тегом приложения

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

Когда я перепрограммировал свой проект в Java (возможно, для отправки в сообщество) и запуска, я заметил, что название программы снова появляется вверху, и поэтому моя кнопка исчезает ниже.

Хорошо, нет проблем.Я вернулся в проект Kotlin и внес вышеупомянутые изменения в мой новый проект Java .

Таким образом, кнопка появляется, но выглядит обрезанной, так же, какмой оригинальный проект в Kotlin .

Однако я догадался: это будет, что моя проблема резки связана с этим материалом?

Я снова ищу, как вынутьстрока заголовка в приложениях, и я нашел это сообщение в Переполнение стека .

В посте показаны 2 новостные ленты, которые я никогда раньше не видел.Может быть ... Так что я добавил в NoActioBar стили 2 дополнительные строки.

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

На самом деле, этот флаг windowFullScreen полностью решает мой первоначальный вопрос !!!Какие изменения произошли?Маленький зеленый верхний индикатор состояния с уровнем заряда батареи, сигналом телефона и другими вещами исчезает с моего экрана.Это эффект полноэкранного режима

Now it's ok!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...