如何根据JSON响应设置多个按钮?

时间:2019-04-11 06:26:09

标签: android android-layout

我创建了一个应用程序,正在其中从服务器中获取数据。因此,我在代码中使用了JSON解析。我已成功从服务器解析了JSON。现在,我想根据从JSON响应获得的可见性在布局中设置按钮。

也就是说,如果可见性为true,则按钮应该可见,如果为false,则按钮应禁用。它可以工作,但是如果某个按钮的可见性为false,则布局中会有空间。因此,如何动态设置布局以使所有可见按钮都显示在一行中。

我创建了三个线性布局,每个线性布局包含三个按钮。现在,如果json响应显示某个按钮的可见性为false,则将该按钮的可见性设置为off。

  if (Menuname.equals("StudentDailyDiary")) {
                                studentdiary.setVisibility(View.VISIBLE);

moreOptionLayout.setVisibility(View.VISIBLE);
                                hrview.setVisibility(View.VISIBLE);
                                rlleftview.setVisibility(View.VISIBLE);
                                rlrightview.setVisibility(View.VISIBLE);
                            }
                            if (Menuname.equals("BookSearch")) {
                                studlibrary.setVisibility(View.VISIBLE);

moreOptionLayout.setVisibility(View.VISIBLE);
                                hrview.setVisibility(View.VISIBLE);
                                rlleftview.setVisibility(View.VISIBLE);
                                rlrightview.setVisibility(View.VISIBLE);
                            }

在第一个布局中说三个按钮,第二个按钮的可见性为假,那么在第二个按钮的位置应放置第三个按钮,所有布局中的按钮都不应有空格。也就是说,如果第三个按钮的可见性为假,则第二个布局的第一个按钮应设置在第三个按钮的位置。

enter image description here

5 个答案:

答案 0 :(得分:1)

我认为要使用的正确ViewGroup是GridLayout

下面是一个简单的示例:

activity_main.xml

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:columnWidth="80dp"
    android:gravity="center"
    android:numColumns="3"
    android:stretchMode="columnWidth" />

MainActivity.kt

class MainActivity : AppCompatActivity() {

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

        val numbers = arrayOf("BUTTON1", "BUTTON2", "BUTTON4", "BUTTON5", "BUTTON6")

        val adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, numbers)

        gridView.adapter = adapter

        gridView.onItemClickListener = AdapterView.OnItemClickListener {
            parent, v, position, id ->
            Toast.makeText(applicationContext, (v as TextView).text, Toast.LENGTH_SHORT).show()
        }
    }
}

此示例使用String,但是您可以创建任何所需的适配器。现在,在执行JSON响应后,只需填充数组并将其设置为适配器即可。

希望有帮助

答案 1 :(得分:0)

对于元素可见性,有三个选项,

View.VISIBLE
View.INVISIBLE 
View.GONE

使用View.GONE表示不想显示的元素。

答案 2 :(得分:0)

之间的区别
View.INVISIBLE

View.GONE 

是View.GONE不占空间,您应该使用view.GONE

答案 3 :(得分:0)

您有两种选择可以这样做

1:-

View.VISIBLE  //Visible the view which is acquire its space
View.INVISIBLE //Invisible the view and it acquire the space 
View.GONE //visibility Gone of its view and also not acquire view space

2:-

您可以使用RecyclerView并将模型传递给adapter,然后根据其model显示按钮。

答案 4 :(得分:0)

在布局XML中将按钮可见性设置为消失 因此,他们在可见性不可见的情况下不会留有空白

    <Button
    android:id="@+id/btn_1"
    android:layout_width="0dp"
    android:layout_height="wrap_content" 
    android:layout_weight="1"
    android:visibility="gone"/>