如何在此代码上包含内容按钮? (窗口管理员)(Android)

时间:2013-11-03 23:12:24

标签: android android-layout button android-windowmanager

如何创建此按钮,由代码包装其内容创建的按钮?这是一个使用窗口管理器来显示视图的服务。 Button被称为mainButton。问题是那个按钮填满了父母。

package com.toksis.pvscreen;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.PixelFormat;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.DragEvent;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * Created by god-gavedmework on 23/10/13.
 */
public class DragDropButtonMainService extends Service{
    private LinearLayout main;
    private LinearLayout firstLayer;
    private LinearLayout secondLayer;
    private FrameLayout  vTopLeft;
    private FrameLayout  vTopRight;
    private FrameLayout  vBottomLeft;
    private FrameLayout  vBottomRight;
    private Integer gravity;


    private Button mainButton;
    private ViewGroup mView;
    private LayoutInflater inflater;

    public IBinder onBind(Intent intent) {
        return null;
    }


    public void onCreate()  {
        super.onCreate();


        createDragDropLayout();



    }

       void createDragDropLayout() {

           mainButton = new Button(this);
           mainButton.setText("Main");

           inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

           WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);

           WindowManager.LayoutParams params = new WindowManager.LayoutParams(

                   WindowManager.LayoutParams.TYPE_PHONE,
                   WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
                           | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
                           | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                   PixelFormat.TRANSLUCENT
           );


           params.gravity = Gravity.RIGHT | Gravity.TOP;


           LocationSerializable ls = new LocationSerializable();



           mView =  (ViewGroup) inflater.inflate(R.layout.dragdroplayout, null);


           vTopLeft   = (FrameLayout) mView.findViewById(R.id.topLeft);
           vTopRight  = (FrameLayout)  mView.findViewById(R.id.topRight);
           vBottomLeft = (FrameLayout) mView.findViewById(R.id.bottomLeft);
           vBottomRight= (FrameLayout) mView.findViewById(R.id.bottomRight);
           firstLayer = (LinearLayout) mView.findViewById(R.id.top);
           secondLayer = (LinearLayout) mView.findViewById(R.id.bottom);




           gravity = ls.getGravity(getApplicationContext());


           if (gravity  == (Gravity.LEFT | Gravity.TOP)){

               vTopLeft.addView(mainButton);


           }



           if (gravity == (Gravity.RIGHT | Gravity.TOP)){


               vTopRight.addView(mainButton);




           }


           if (gravity == (Gravity.RIGHT | Gravity.BOTTOM)){


               vBottomRight.addView(mainButton);




           }


           if (gravity == (Gravity.LEFT | Gravity.BOTTOM)){

               vBottomLeft.addView(mainButton);



           }


         //  mainButton.setLayoutParams(new WindowManager.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

        //   mainButton.setGravity(ls.getGravity(getApplicationContext()));


           wm.addView(mView,params);

           mainButton.setOnTouchListener(new MyTouchListener() );
           vTopLeft.setOnDragListener(new MyDragListener());
           vTopRight.setOnDragListener(new MyDragListener());
           vBottomLeft.setOnDragListener(new MyDragListener());
           vBottomRight.setOnDragListener(new MyDragListener());


           Log.d("tok", "add mview");



       }


    public void onDestroy() {
        super.onDestroy();


    }



}

容器XML布局。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/main"
    >
        <LinearLayout
            android:id="@+id/top"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:orientation="horizontal"
            >


        <FrameLayout
            android:id="@+id/topLeft"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:tag="topLeft"
            android:layout_weight="1.0"
            android:background="#ff3d38">


        </FrameLayout>


        <FrameLayout
            android:id="@+id/topRight"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:tag="topRight"

        android:layout_weight="1.0"
            android:background="#fff839"></FrameLayout>

        </LinearLayout>

    <LinearLayout
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal"
        android:id="@+id/bottom"
        >

    <FrameLayout
            android:id="@+id/bottomLeft"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:layout_weight="1.0"
            android:background="#1e22ff">

        </FrameLayout>

        <FrameLayout
            android:id="@+id/bottomRight"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:layout_weight="1.0"
            android:background="#32ff1f"></FrameLayout>


</LinearLayout>



</LinearLayout>

主按钮应包裹MAIN文本而不填充父视图。

enter image description here

1 个答案:

答案 0 :(得分:0)

我最后通过执行此代码来包装按钮。关键是检查父级的布局。由于父是一个framelayout容器,我使用了Framelayout.LayoutParams。

mainButton.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,FrameLayout.LayoutParams.WRAP_CONTENT));