Android布局优化

TableLayout(表格布局) 使用GridView代替


Android布局原则

将可复用的组件抽取出来并通过include标签使用

使用ViewStub标签来加载一些不常用的布局

使用merge标签减少布局的嵌套层次


common_title.xml




    

    

    


main.xml




    

    



MainActivity.java中是可以找到common_title.xml中的控件的


public class MainActivity extends AppCompatActivity {

    TextView titl_tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        titl_tv = (TextView) findViewById(R.id.title);
        titl_tv.setText("自定义布局");
    }
}


使用merge合并UI布局


布局根节点是FrameLayout且不需要设置background或padding等属性,可以用merge代替


某布局作为子布局被其他布局include时,使用merge当作该布局的顶节点,这样在被引入时顶节点会自动被忽略


common_progress.xml




    

    
        
        
        
        



main.xml




    

    

        

        

    





使用ViewStub惰性加载


作用:ViewStub标签同include标签一样可以用来引入一个外部布局,不同的是,ViewStub引入的布局默认不会扩张,既不会占用显示也不会占用位置,从而在解析layout时节省cpu和内存


common_text.xml




    



main.xml




    

    

        

        

    

    



MainActivity.java

public class MainActivity extends AppCompatActivity {

    private Button button;
    private ViewStub stub;
    TextView titl_tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        titl_tv = (TextView) findViewById(R.id.title);
        titl_tv.setText("自定义布局");

        button = (Button) findViewById(R.id.button);
        stub = (ViewStub) findViewById(R.id.stub);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                stub.inflate();
            }
        });
    }
}


https://github.com/LiuchangDuan/demo


你可能感兴趣的:(Android)