我正在尝试将LinearLayout作为子项添加到另一个LinearLayout组件,但它根本不会显示在屏幕上。
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ReceivedMessage"
android:background="@android:color/holo_blue_light"
android:visibility="visible"
tools:showIn="@layout/content_chat">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@mipmap/ic_launcher"
android:id="@+id/ProfilePicture"
android:layout_weight="1" />
<TextView
android:text=" Message"
android:layout_width="305dp"
android:layout_height="match_parent"
android:id="@+id/MessageText"
android:gravity="center_vertical" />
</LinearLayout>
代码:
Button testMessageButton = (Button) findViewById(R.id.TestMessageButton);
testMessageButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
LinearLayout msgLayout = (LinearLayout) findViewById(R.id.MessageLayout);
LayoutInflater vi = (LayoutInflater)getBaseContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = vi.inflate(R.layout.message_received, msgLayout, false);
msgLayout.addView(v);
}
});
导致组件不出现在屏幕上的原因是什么?
答案 0 :(得分:0)
您的问题不正确,但我会以两种不同的方式回答
首先,如果要添加的LinearLayout位于不同的xml文件中,那么您可以将xml文件充气并将其添加到Activity类中的父LinearLayout,如下所示
Button testMessageButton = (Button) findViewById(R.id.TestMessageButton);
testMessageButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
LinearLayout msgLayout = (LinearLayout) findViewById(R.id.MessageLayout);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
LayoutInflater vi = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = vi.inflate(R.layout.message_received, null);
v.setLayoutParams(params);
msgLayout.addView(v);
}
});
我已更新我的解决方案。部分问题出在您的布局文件
中这是活动类
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
private LinearLayout mainLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainLayout = (LinearLayout)findViewById(R.id.main_layout);
Button addChatButton = (Button)findViewById(R.id.add_chat);
addChatButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
LayoutInflater vi = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout mView = (LinearLayout)vi.inflate(R.layout.test_layout, mainLayout, false);
mView.setLayoutParams(params);
mainLayout.addView(mView);
}
});
}
}
Activity类
的xml布局文件<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.inducesmile.mylinear.MainActivity">
<Button
android:id="@+id/add_chat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
android:text="@string/add_chat"
android:layout_gravity="center|center_horizontal"/>
</LinearLayout>
最后,包含要膨胀的Linearlayout的布局文件并添加到根LinearLayout。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ReceivedMessage"
android:background="@android:color/holo_blue_light"
android:visibility="visible">
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
android:id="@+id/ProfilePicture"
android:layout_weight="2" />
<TextView
android:text="@string/message"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/MessageText"
android:layout_weight="7"
android:paddingTop="14dp"
android:paddingBottom="14dp"
android:gravity="center_vertical" />
</LinearLayout>
答案 1 :(得分:0)
基于Inducesmile,如果将子容器添加到父容器中,则可能会出现问题,因为父容器未放置在滚动视图内,因此如果要进行制作,则所有要添加的子项都不会显示确保已添加的视图在添加任何子项
后调用parentlayout.getChildCount()