2014-12-30 3 views
0

Im разрабатывает приложение, в котором плавающий компонент должен появиться при приеме вызова, и компонент будет иметь несколько кнопок для выполнения необходимых действий. Я пробовал следовать. Я реализовал всплывающее окно, сделав основной вид деятельности полупрозрачным. Когда этот компонент всплывает, Im способен перемещать его на экране, но так как активность полупрозрачна, им не удается выполнить какое-либо другое действие enter image description here.Плавающие виджеты/всплывающее окно в android

здесь вы можете видеть всплывающее окно, я могу переместить его, но я не могу прокрутить меню в фоновом режиме. Как я могу реализовать таким образом, что я могу выполнять обе операции, то есть на popupwindow и фоновом экране.

Мои коды

`public class MainActivity extends Activity { 
    int mCurrentX; 
    int mCurrentY; 
    private float mDx; 
    private float mDy; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     final View cv = new View(this); 


      TextView tv = new TextView(this); 
      tv.setBackgroundColor(0xffeeeeee); 
      tv.setTextColor(0xff000000); 
      tv.setTextSize(24); 
      tv.setText("click me\nthen drag me"); 
      tv.setPadding(8, 8, 8, 8); 
      final PopupWindow mPopup = new PopupWindow(tv, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
      OnTouchListener otl = new OnTouchListener() { 

       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        // TODO Auto-generated method stub 
        int action = event.getAction(); 

        if (action == MotionEvent.ACTION_DOWN) { 
         mDx = mCurrentX - event.getRawX(); 
         mDy = mCurrentY - event.getRawY(); 
        } else 
        if (action == MotionEvent.ACTION_MOVE) { 
         mCurrentX = (int) (event.getRawX() + mDx); 
         mCurrentY = (int) (event.getRawY() + mDy); 
         mPopup.update(mCurrentX, mCurrentY, -1, -1); 

        } 
        return true; 
       } 
      }; 
      tv.setOnTouchListener(otl); 

      mCurrentX = 20; 
      mCurrentY = 50; 

      cv.post(new Runnable() { 
       @Override 
       public void run() { 
        mPopup.showAtLocation(cv, Gravity.NO_GRAVITY, mCurrentX, mCurrentY); 
       } 
      }); 
    } 

}` 

манифеста

`<application android:label="@string/app_name" android:icon="@drawable/ic_launcher"> 

     <activity android:name=".MainActivity" 
        android:theme="@android:style/Theme.Translucent.NoTitleBar" 
        android:label="@string/app_name" 
        android:configChanges="orientation|screenSize" 
        android:windowSoftInputMode="adjustResize|stateAlwaysHidden"> 

      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 

     </activity> 

       <activity 
       android:name="PopupMainActivity" 
       android:label="@string/app_name" 
       android:theme="@style/Theme.FloatingWindow.Popup" 
       android:configChanges="orientation|screenSize" 
       android:windowSoftInputMode="adjustResize|stateAlwaysHidden" 
       android:clearTaskOnLaunch="true" 
       android:exported="true" 
       tools:ignore="ExportedActivity" /> 

    </application>` 

пожалуйста, помогите мне в этом. Я хочу реализовать компонент виджетов в целом. Благодаря!!

ответ

1

Вы должны начать Услугу переднего плана и рисовать, используя WindowManager поверх всего остального, управлять всплывающее положением, размером, и т.д. ...

WindowManger windowManager = Context.getSystemService(Context.WINDOW_SERVICE); 

Вы также должны добавить это разрешения «андроидом .permission.SYSTEM_ALERT_WINDOW "в ваш манифест.

Более простое решение было бы использовать библиотеку под названием StandOut, это в основном берет на себя все, что я уже упоминал выше, и обеспечивает дополнительные функции, такие как:

  • декораторы окна (заголовок, минимизировать/кнопку закрытия, границы, ручка изменения размера)
  • Окна подвижны и изменяемы по размеру. Вы можете принести к передней панели, свести к минимуму, и закрыть
  • Минимизация окна могут быть восстановлены (пример APK демки это с помощью панели уведомлений)
  • Создание нескольких типов окон, и несколько окон каждого типа
+0

Спасибо за ответ, более подробную информацию о том, как пользоваться библиотекой, пожалуйста? Im, новый для android и изучение некоторых концепций, я могу нуждаться в дополнительной помощи! Благодаря! –

+0

Проверьте проект примера библиотеки, особенно StandOutExampleActivity.java, SimpleWindow.java и AndroidManifest.xml –

+0

@MostafaGazar, когда библиотека StandOut показывает CommingSoon? –

Смежные вопросы