2012-04-19 2 views
2

Я пытаюсь добавить вид поверх другого.как выбрать, какой вид будет сверху в android

Сначала я устанавливаю представление через xml, а затем хочу добавить второй программно. общественного недействительными OnCreate (Bundle savedInstanceState)

{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    LinearLayout ll = (LinearLayout) findViewById(R.id.layout); 
    drawView = new DrawView(this); 
    drawView.setBackgroundColor(Color.TRANSPARENT); 
    Bitmap bitmap = Bitmap.createBitmap(10, 100, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    drawView.draw(canvas); 
    drawView.setLayoutParams(new LayoutParams(800, 0, 0.18f)); 
    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)drawView.getLayoutParams(); 
    params.setMargins(0, 0, 0, -130); 
    drawView.setLayoutParams(params); 
    ll.addView(drawView, 2); 

}

Моя проблема заключается в том, что XML находится на вершине точки зрения, что я пытаюсь добавить.

Как сделать второй вид сверху?

ответ

0

Вы можете вызвать метод bringToFront вида по:

drawView.bringToFront(); 
+0

, когда я делаю это, исчезает вид – roiberg

+0

Странно. Можете ли вы попытаться добавить представление как первое? 'll.addView (drawView, 0)' –

+0

Я думаю, что реальной проблемой является выбор макета, как отметил @Luksprog. –

2

LinearLayout является макет, который устраивает ее дети один за другим вертикальным или горизонтальным. Если вы хотите складывать представления один поверх другого, используйте макет, который позволяет это, как RelativeLayout, вместо LinearLayout.

+0

не должен делать трюк? или thats hapens, когда вы используете маржу в линейном макете? – roiberg

+0

@roiberg Я не знаю вашего точного макета, чтобы увидеть, что происходит, но я не думаю, что поля будут работать. И даже если это сработает, вы, вероятно, не захотите использовать поля, если хотите, чтобы ваше приложение выглядело прилично на всех экранах телефонов, а не только на текущем. – Luksprog

2

Если вы хотите складывать представления друг над другом, вы должны использовать Relative Layout. Поэтому в вашем случае замените «layout» на Relative layout, в java-коде вы можете сделать что-то вроде ниже.

RelativeLayout.LayoutParams baseLayoutParam = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
    baseLayout.setLayoutParams(baseLayoutParam); 
    DrawView drawView = new DrawView(context); 
    RelativeLayout.LayoutParams rLayoutParams = new RelativeLayout.LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT, (int) (250 * Utility.getDip(context))); 
    rLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT); // Adjust accordingly to your requirement 
    drawView.setLayoutParams(rLayoutParams);ll.addView(drawView); 
+0

да !!! благодаря!!!!!!! – roiberg