工具栏隐藏其他元素android kotlin

时间:2018-08-14 16:10:59

标签: android toolbar

我将Android Studio与Kotlin一起使用,并且我的工具栏存在问题,当我创建它时,它会在我的活动中隐藏其他元素=>

没有工具栏

MainActivity.kt

class MainActivity : AppCompatActivity() {

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

    val user = User("Bob", 20)
    findViewById<Button>(R.id.go_to_second).setOnClickListener {
        println("Lancement de la seconde activité")
        val intent = Intent(this, Second::class.java)
        intent.putExtra("user", user)
        startActivity(intent)
    }

    findViewById<Button>(R.id.bouton_dialogue).setOnClickListener {
        val confdial = ConfirmDialog()
        confdial.listener = object: ConfirmDialog.ConfDeleteListener {
            override fun onPositiveClick() {
                Log.i("MainActivity", "Recuperation du postive suppression dialog")
                val dd = FileListDialog()
                dd.show(supportFragmentManager, "onPositiveClick")
            }

            override fun onNegativeClick() {
                Log.i("MainActivity", "Confirmation du negative suppression dialog")
            }

        }
        confdial.show(supportFragmentManager, "confirmDelete")
    }
}
}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:layout_gravity="center"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:visibility="visible"/>

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/go_to_second"
    android:visibility="visible"
    android:layout_gravity="center"
    android:text="go pr l'aventure" />

<Button
    android:id="@+id/bouton_dialogue"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:visibility="visible"
    android:text="lancement dialogue" />

结果=>

result without toolbar

使用工具栏

MainActivity.kt

import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v7.widget.Toolbar
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.widget.Button
import android.widget.Toast

class MainActivity : AppCompatActivity() {

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

    val toolbar = findViewById<Toolbar>(R.id.toolbar)
    setSupportActionBar(toolbar)

    val user = User("Bob", 20)
    findViewById<Button>(R.id.go_to_second).setOnClickListener {
        println("Lancement de la seconde activité")
        val intent = Intent(this, Second::class.java)
        intent.putExtra("user", user)
        startActivity(intent)
    }

    findViewById<Button>(R.id.bouton_dialogue).setOnClickListener {
        val confdial = ConfirmDialog()
        confdial.listener = object: ConfirmDialog.ConfDeleteListener {
            override fun onPositiveClick() {
                Log.i("MainActivity", "Recuperation du postive suppression dialog")
                val dd = FileListDialog()
                dd.show(supportFragmentManager, "onPositiveClick")
            }

            override fun onNegativeClick() {
                Log.i("MainActivity", "Confirmation du negative suppression dialog")
            }

        }
        confdial.show(supportFragmentManager, "confirmDelete")
    }
}

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.main_menu, menu)
    return true
}

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
    when(item?.itemId){
        R.id.action_second -> {
            val intent = Intent(this, Menu_activiy::class.java)
            startActivity(intent)
            return true
        }
        R.id.action_delete -> {
            Toast.makeText(this, "supprimer", Toast.LENGTH_LONG).show()
            return true
        }
        else -> return super.onOptionsItemSelected(item)
    }
}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">


<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_height="?attr/actionBarSize"
    android:layout_width="match_parent"
    android:background="@color/colorPrimary"/>


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:layout_gravity="center"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:visibility="visible"/>

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/go_to_second"
    android:visibility="visible"
    android:layout_gravity="center"
    android:text="go pr l'aventure" />

<Button
    android:id="@+id/bouton_dialogue"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:visibility="visible"
    android:text="lancement dialogue" />

</LinearLayout>

main_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">


<item android:id="@+id/action_second"
    android:icon="@mipmap/ic_launcher_round"
    android:title="Seconde"
    app:showAsAction="always"/>

<item android:id="@+id/action_save"
    android:icon="@drawable/epee"
    android:title="Enregistrer"
    app:showAsAction="always"/>

<item android:id="@+id/action_delete"
    android:icon="@drawable/pioche"
    android:title="Supprimer"
    app:showAsAction="ifRoom"/>

<item android:id="@+id/action_help"
    android:icon="@drawable/pomme"
    android:title="Aide"
    app:showAsAction="never"/>

</menu>

使用工具栏的结果=>

Result with ToolBar

所以我们可以看到ToolBar,但是“ Hello World” TextView之类的其他元素已经消失了

4 个答案:

答案 0 :(得分:0)

设置LinearLayout的方向:
    android:orientation="horizontal"android:orientation="vertical"
也会删除所有引用ConstraintLayout的属性。

答案 1 :(得分:0)

您的工具栏的宽度为match_parent。这意味着工具栏宽度与父视图相同。您的其他视图仍然存在,但是它们不可见,因为LinearLayout的方向是水平的。它们不在父视图(LinearLayout)中。

您必须将父布局的方向更改为垂直或更改父视图的类型。

答案 2 :(得分:0)

我想问题与上面的答案中所述相同。

  

当未指定LinearLayout的方向时,它将使用默认值,即水平方向。布局应该是列还是行?在行中使用“水平”,在列中使用“垂直”。默认值为水平。

由于您没有给出任何方向,因此它是水平的并且将其他视图推到范围之外,因此最好在线性布局中给出方向。

android:orientation="vertical"

答案 3 :(得分:0)

您可以通过以下方式为您的Hello World TextView设置边距 android:layout_marginTop =“?attr / actionBarSize”