Я пытаюсь добавить LinearLayout
, представляющий небольшую панель, содержащую некоторые элементы, к основному AbsoluteLayout
моего Activity
. Я использую этот код, но приложение выходит из строя, это конструктор класса панели, который должен добавить представление в основной макет. Аналогичный код работает, чтобы добавить созданные кнопки времени выполнения, но не будет работать для этого.Android: как добавить макет в AbsoluteLayout
public ButtonSetupPanel(String btnName, int keyCode, View v){
AbsoluteLayout abs = (AbsoluteLayout) v.findViewById(R.id.mainbg);
LinearLayout panel = (LinearLayout) v.findViewById(R.id.btnSetupPanel);
panel.setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT, 1023, 300));
panel.setOnTouchListener(this);
abs.addView(panel);
}
LogCat: (Я использую библиотеку Standout)
06-12 22: 43: 22,268: Е/AndroidRuntime (8146): неустранимый: Главный 06-12 22:43: 22.268: E/AndroidRuntime (8146): java.lang.RuntimeException: не удалось запустить службу [email protected] с намерением {act = SHOW cmp = com.vektor.amapper/.windows. MainWindow (имеет дополнительные функции)}: java.lang.NullPointerException 06-12 22: 43: 22.268: E/AndroidRuntime (8146): at android.app.ActivityThread.handleServiceArgs (ActivityThread.java:2507) 06-12 22: 43: 22.268: E/AndroidRuntime (8146): at android.app.ActivityThread.access $ 1900 (ActivityThread.java:130) 06 -12 22: 43: 22.268: E/AndroidRuntime (8146): at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1292) 06-12 22: 43: 22.268: E/AndroidRuntime (8146) : at android.os.Handler.dispatchMessage (Handler.java:99) 06-12 22: 43: 22.268: E/AndroidRuntime (8146): at android.os.Looper.loop (Looper.java:137) 06-12 22: 43: 22.268: E/AndroidRuntime (8146): at android.app.ActivityThread.main (ActivityThread.java:4745) 06-12 22: 43: 22.268: E/AndroidRuntime (8146): at java.lang.reflect.Method.invokeNative (родной метод) 06-12 22: 43: 22.268: E/AndroidRuntime (8146): at java.lang.reflect.Method.invoke (Метод. java: 511) 06-12 22: 43: 22.268: E/AndroidRuntime (8146): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:786) 06-12 22:43 : 22.268: E/AndroidRuntime (8146): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:553) 06-12 22: 43: 22.268: E/AndroidRuntime (8146): at dalvik .system.NativeStart.main (родной метод) 06-12 22: 43: 22.268: E/AndroidRuntime (8146): вызвано: java.lang.NullPointerException 06-12 22: 43: 22.268: E/AndroidRuntime (8146)): по com.vektor.amapper.windows.ui.ButtonSetupPanel. (ButtonSetupPanel.java:18) 06-12 22: 43: 22.268: E/AndroidRuntime (8146): at com.vektor.amapper.windows.MainWindow.createAndAttachView (MainWindow.java:86) 06-12 22: 43: 22.268: E/AndroidRuntime (8146): at wei.mark.standout.ui.Window. (Window.java:150) 06-12 22:43 : 22.268: E/AndroidRuntime (8146): at wei.mark.standout.StandOutWindow.show (StandOutWindow.java:1079) 06-12 22: 43: 22.268: E/AndroidRuntime (8146): at wei.mark .standout.StandOutWindow.onStartCommand (StandOutWindow.java:382) 06-12 22: 43: 22.268: E/AndroidRuntime (8146): at com.vektor.amapper.windows.MainWindow.onStartCommand (MainWindow.java:150) 06-12 22: 43: 22.268: E/AndroidRuntime (8146): at android.app.ActivityThread.handleServiceArgs (ActivityThread.java:2490) 06-12 22: 43: 22.268: E/AndroidRuntime (8146): ...10 более
Update: Я обнаружил, что проблема заключается в том, что, поскольку это LinearLayout
находится в другом файле XML мне нужно надуть другой файл макета и показать определенный вид (The LinearLayout). Как действовать?
Update2: Я использовал этот код, чтобы получить нужный вид
public ButtonSetupPanel(String btnName, int keyCode, View v){
AbsoluteLayout abs = (AbsoluteLayout) v.findViewById(R.id.mainbg);
LinearLayout view = (LinearLayout) LayoutInflater.from(v.getContext()).inflate(R.layout.btnsetup , null);
LinearLayout panel = (LinearLayout) view.findViewById(R.id.btnSetupPanel);
view.removeView(panel);
panel.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
panel.setX(512f);
panel.setY(300f);
panel.setOnTouchListener(this);
abs.addView(panel);
}
AbsoluteLayout осуждался в уровне API 3 – Blackbelt
мне нужно использовать его. – Vektor88
Что говорит Logcat? –