mirror of
https://github.com/sifacaii/VlcJellyfin
synced 2025-06-03 00:58:06 -04:00
优化播放控制
This commit is contained in:
parent
df3e210841
commit
ecb1c29d17
3
.idea/misc.xml
generated
3
.idea/misc.xml
generated
@ -3,7 +3,10 @@
|
|||||||
<component name="DesignSurface">
|
<component name="DesignSurface">
|
||||||
<option name="filePathToZoomLevelMap">
|
<option name="filePathToZoomLevelMap">
|
||||||
<map>
|
<map>
|
||||||
|
<entry key="..\:/code/VlcJellyfin/app/src/main/res/drawable/popmenu_focus.xml" value="0.1555" />
|
||||||
<entry key="..\:/code/VlcJellyfin/app/src/main/res/layout/activity_vlc_player.xml" value="0.286231884057971" />
|
<entry key="..\:/code/VlcJellyfin/app/src/main/res/layout/activity_vlc_player.xml" value="0.286231884057971" />
|
||||||
|
<entry key="..\:/code/VlcJellyfin/app/src/main/res/layout/popmenu.xml" value="0.14479166666666668" />
|
||||||
|
<entry key="..\:/code/VlcJellyfin/app/src/main/res/layout/popmenu_item.xml" value="0.14479166666666668" />
|
||||||
<entry key="..\:/work/VlcJellyfin/app/src/main/res/drawable/shape_user_focus.xml" value="0.1625" />
|
<entry key="..\:/work/VlcJellyfin/app/src/main/res/drawable/shape_user_focus.xml" value="0.1625" />
|
||||||
<entry key="..\:/work/VlcJellyfin/app/src/main/res/drawable/shape_user_focus_VH.xml" value="0.1625" />
|
<entry key="..\:/work/VlcJellyfin/app/src/main/res/drawable/shape_user_focus_VH.xml" value="0.1625" />
|
||||||
<entry key="..\:/work/VlcJellyfin/app/src/main/res/drawable/shape_user_focus_vholder.xml" value="0.1625" />
|
<entry key="..\:/work/VlcJellyfin/app/src/main/res/drawable/shape_user_focus_vholder.xml" value="0.1625" />
|
||||||
|
91
app/src/main/java/org/sifacai/vlcjellyfin/PopMenu.java
Normal file
91
app/src/main/java/org/sifacai/vlcjellyfin/PopMenu.java
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
package org.sifacai.vlcjellyfin;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.graphics.drawable.ColorDrawable;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.PopupWindow;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class PopMenu extends PopupWindow {
|
||||||
|
|
||||||
|
public class menu{
|
||||||
|
public int groupid;
|
||||||
|
public int id;
|
||||||
|
public int orderid;
|
||||||
|
public String name;
|
||||||
|
public View v;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
private ArrayList<menu> items;
|
||||||
|
private View attView;
|
||||||
|
private LinearLayout contentView;
|
||||||
|
|
||||||
|
public PopMenu(Context context, View attView) {
|
||||||
|
super(context);
|
||||||
|
this.context = context;
|
||||||
|
items = new ArrayList<>();
|
||||||
|
|
||||||
|
setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||||
|
setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||||
|
setOutsideTouchable(true);
|
||||||
|
setFocusable(true);
|
||||||
|
setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
||||||
|
contentView = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.popmenu,null);
|
||||||
|
setContentView(contentView);
|
||||||
|
this.attView = attView;
|
||||||
|
}
|
||||||
|
|
||||||
|
public menu add(int groupid,int id,int orderid,String name){
|
||||||
|
menu m = new menu();
|
||||||
|
m.groupid = groupid;
|
||||||
|
m.id = id;
|
||||||
|
m.orderid = orderid;
|
||||||
|
m.name = name;
|
||||||
|
View v = LayoutInflater.from(context).inflate(R.layout.popmenu_item,null);
|
||||||
|
m.v = v;
|
||||||
|
((TextView)v).setText(name);
|
||||||
|
items.add(m);
|
||||||
|
contentView.addView(v);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void show(){
|
||||||
|
contentView.measure(makeDropDownMeasureSpec(getWidth())
|
||||||
|
,makeDropDownMeasureSpec(getHeight()));
|
||||||
|
int offx = 0;
|
||||||
|
int offy = contentView.getMeasuredHeight() + attView.getHeight();
|
||||||
|
showAsDropDown(attView,offx,-offy);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void show(int index){
|
||||||
|
show();
|
||||||
|
items.get(index).v.requestFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void show(String name){
|
||||||
|
show();
|
||||||
|
for (menu m:items) {
|
||||||
|
if(m.name.equals(name)){
|
||||||
|
m.v.requestFocus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("ResourceType")
|
||||||
|
private static int makeDropDownMeasureSpec(int measureSpec) {
|
||||||
|
int mode;
|
||||||
|
if (measureSpec == ViewGroup.LayoutParams.WRAP_CONTENT) {
|
||||||
|
mode = View.MeasureSpec.UNSPECIFIED;
|
||||||
|
} else {
|
||||||
|
mode = View.MeasureSpec.EXACTLY;
|
||||||
|
}
|
||||||
|
return View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.getSize(measureSpec), mode);
|
||||||
|
}
|
||||||
|
}
|
@ -3,16 +3,14 @@ package org.sifacai.vlcjellyfin;
|
|||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
import android.util.Log;
|
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
import okhttp3.Headers;
|
import okhttp3.Headers;
|
||||||
import okhttp3.MediaType;
|
import okhttp3.MediaType;
|
||||||
@ -145,6 +143,29 @@ public class Utils {
|
|||||||
okhttpSend(url,json);
|
okhttpSend(url,json);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据缩放类型取名称
|
||||||
|
* @param scaleName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getVlcScaleTypeName(String scaleName){
|
||||||
|
switch (scaleName){
|
||||||
|
case "SURFACE_BEST_FIT":
|
||||||
|
return "自动";
|
||||||
|
case "SURFACE_FIT_SCREEN":
|
||||||
|
return "适应屏幕";
|
||||||
|
case "SURFACE_FILL":
|
||||||
|
return "满屏";
|
||||||
|
case "SURFACE_16_9":
|
||||||
|
return "16:9";
|
||||||
|
case "SURFACE_4_3":
|
||||||
|
return "4:3";
|
||||||
|
case "SURFACE_ORIGINAL":
|
||||||
|
return "原始";
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
public static int dp2px(Context context, float value) {
|
public static int dp2px(Context context, float value) {
|
||||||
return (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics()) + 0.5f);
|
return (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics()) + 0.5f);
|
||||||
}
|
}
|
||||||
|
@ -22,12 +22,13 @@ import java.util.Timer;
|
|||||||
import java.util.TimerTask;
|
import java.util.TimerTask;
|
||||||
|
|
||||||
public class VlcPlayerActivity extends BaseActivity implements MediaPlayer.EventListener
|
public class VlcPlayerActivity extends BaseActivity implements MediaPlayer.EventListener
|
||||||
, View.OnClickListener
|
, View.OnClickListener {
|
||||||
, PopupMenu.OnMenuItemClickListener{
|
|
||||||
private static final String TAG = "VLC播放器";
|
private static final String TAG = "VLC播放器";
|
||||||
public final int TrackType_Subtitle = 0;
|
public final int Type_SubtitleTrack = 0;
|
||||||
public final int TrackType_Audio = 1;
|
public final int Type_AudioTrack = 1;
|
||||||
public final int TrackType_Playlist = 2;
|
public final int Type_Playlist = 2;
|
||||||
|
public final int Type_Scale = 3;
|
||||||
|
public final int Type_Speed = 4;
|
||||||
|
|
||||||
private Activity mActivity;
|
private Activity mActivity;
|
||||||
private MediaPlayer mediaPlayer;
|
private MediaPlayer mediaPlayer;
|
||||||
@ -42,6 +43,8 @@ public class VlcPlayerActivity extends BaseActivity implements MediaPlayer.Event
|
|||||||
private TextView videoTitle;
|
private TextView videoTitle;
|
||||||
private TextView currTime;
|
private TextView currTime;
|
||||||
private TextView countTime;
|
private TextView countTime;
|
||||||
|
private TextView speedBtn;
|
||||||
|
private TextView scaleBtn;
|
||||||
private ImageView preBtn;
|
private ImageView preBtn;
|
||||||
private ImageView nextBtn;
|
private ImageView nextBtn;
|
||||||
private ImageView playPauseBtn;
|
private ImageView playPauseBtn;
|
||||||
@ -54,9 +57,11 @@ public class VlcPlayerActivity extends BaseActivity implements MediaPlayer.Event
|
|||||||
|
|
||||||
private Timer progressTime = null;
|
private Timer progressTime = null;
|
||||||
|
|
||||||
private PopupMenu playListMenu = null; //播放列表
|
private PopMenu playListMenu = null; //播放列表
|
||||||
private PopupMenu subTrackMenu = null; //字幕菜单
|
private PopMenu subTrackMenu = null; //字幕菜单
|
||||||
private PopupMenu audioTrackMenu = null; //单轨菜单
|
private PopMenu audioTrackMenu = null; //单轨菜单
|
||||||
|
private PopMenu scaleTypeMenu = null; //缩放菜单
|
||||||
|
private PopMenu speedMenu = null; //播放速率菜单
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -160,6 +165,8 @@ public class VlcPlayerActivity extends BaseActivity implements MediaPlayer.Event
|
|||||||
videoTitle = findViewById(R.id.videoTitle); // 标题
|
videoTitle = findViewById(R.id.videoTitle); // 标题
|
||||||
currTime = findViewById(R.id.currTime);
|
currTime = findViewById(R.id.currTime);
|
||||||
countTime = findViewById(R.id.countTime);
|
countTime = findViewById(R.id.countTime);
|
||||||
|
speedBtn = findViewById(R.id.speedBtn);
|
||||||
|
scaleBtn = findViewById(R.id.scaleBtn);
|
||||||
preBtn = findViewById(R.id.preBtn);
|
preBtn = findViewById(R.id.preBtn);
|
||||||
nextBtn = findViewById(R.id.nextBtn);
|
nextBtn = findViewById(R.id.nextBtn);
|
||||||
playPauseBtn = findViewById(R.id.playPauseBtn);
|
playPauseBtn = findViewById(R.id.playPauseBtn);
|
||||||
@ -214,36 +221,85 @@ public class VlcPlayerActivity extends BaseActivity implements MediaPlayer.Event
|
|||||||
audioTracksBtn.setVisibility(View.GONE);
|
audioTracksBtn.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//初始化缩放键
|
||||||
|
scaleBtn.setOnClickListener(this);
|
||||||
|
scaleBtn.setText(Utils.getVlcScaleTypeName(mediaPlayer.getVideoScale().name()));
|
||||||
|
scaleTypeMenu = new PopMenu(this,scaleBtn);
|
||||||
|
MediaPlayer.ScaleType[] scaleTypes = MediaPlayer.ScaleType.values();
|
||||||
|
for(int i=0;i<scaleTypes.length;i++){
|
||||||
|
PopMenu.menu menu = scaleTypeMenu.add(Type_Scale,i,i,Utils.getVlcScaleTypeName(scaleTypes[i].name()));
|
||||||
|
final int Si = i;
|
||||||
|
menu.v.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
scaleTypeMenu.dismiss();
|
||||||
|
if(mediaPlayer.getVideoScale() != scaleTypes[Si]){
|
||||||
|
mediaPlayer.setVideoScale(scaleTypes[Si]);
|
||||||
|
scaleBtn.setText(Utils.getVlcScaleTypeName(mediaPlayer.getVideoScale().name()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//初始化速率键
|
||||||
|
speedBtn.setOnClickListener(this);
|
||||||
|
speedMenu = new PopMenu(this,speedBtn);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initPlayListMenu() {
|
private void initPlayListMenu() {
|
||||||
playListMenu = new PopupMenu(this,playListBtn);
|
playListMenu = new PopMenu(this, playListBtn); //new PopupMenu(this,playListBtn);
|
||||||
for (int i = 0; i < Utils.playList.size(); i++) {
|
for (int i = 0; i < Utils.playList.size(); i++) {
|
||||||
playListMenu.getMenu().add(TrackType_Playlist,i,i,Utils.playList.get(i).Name);
|
PopMenu.menu m = playListMenu.add(Type_Playlist, i, i, Utils.playList.get(i).Name);
|
||||||
|
m.v.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
playListMenu.dismiss();
|
||||||
|
if (m.id != Utils.playIndex) {
|
||||||
|
Utils.playIndex = m.id;
|
||||||
|
play();
|
||||||
}
|
}
|
||||||
playListMenu.setOnMenuItemClickListener(this);
|
}
|
||||||
subTracksBtn.setOnClickListener(this);
|
});
|
||||||
|
}
|
||||||
|
playListBtn.setOnClickListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化字幕菜单
|
* 初始化字幕菜单
|
||||||
|
*
|
||||||
* @param subTrackList
|
* @param subTrackList
|
||||||
*/
|
*/
|
||||||
private void initSubTrackMenu(MediaPlayer.TrackDescription[] subTrackList) {
|
private void initSubTrackMenu(MediaPlayer.TrackDescription[] subTrackList) {
|
||||||
subTrackMenu = new PopupMenu(this,subTracksBtn);
|
subTrackMenu = new PopMenu(this, subTracksBtn);
|
||||||
for (int i = 0; i < subTrackList.length; i++) {
|
for (int i = 0; i < subTrackList.length; i++) {
|
||||||
subTrackMenu.getMenu().add(0,i,i,subTrackList[i].name);
|
PopMenu.menu m = subTrackMenu.add(Type_SubtitleTrack,i,i,subTrackList[i].name);
|
||||||
|
m.v.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
subTrackMenu.dismiss();
|
||||||
|
if(m.id != mediaPlayer.getSpuTrack()){
|
||||||
|
mediaPlayer.setSpuTrack(m.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
subTrackMenu.setOnMenuItemClickListener(this);
|
|
||||||
subTracksBtn.setOnClickListener(this);
|
subTracksBtn.setOnClickListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initAudioTrackMenu(MediaPlayer.TrackDescription[] audioTrackList) {
|
private void initAudioTrackMenu(MediaPlayer.TrackDescription[] audioTrackList) {
|
||||||
audioTrackMenu = new PopupMenu(this,audioTracksBtn);
|
audioTrackMenu = new PopMenu(this, audioTracksBtn);
|
||||||
for (int i = 0; i < audioTrackList.length; i++) {
|
for (int i = 0; i < audioTrackList.length; i++) {
|
||||||
audioTrackMenu.getMenu().add(TrackType_Audio,i,i,audioTrackList[i].name);
|
PopMenu.menu m = audioTrackMenu.add(Type_SubtitleTrack,i,i,audioTrackList[i].name);
|
||||||
|
m.v.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
audioTrackMenu.dismiss();
|
||||||
|
if(m.id != mediaPlayer.getAudioTrack()){
|
||||||
|
mediaPlayer.setAudioTrack(m.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
audioTrackMenu.setOnMenuItemClickListener(this);
|
|
||||||
audioTracksBtn.setOnClickListener(this);
|
audioTracksBtn.setOnClickListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -446,32 +502,13 @@ public class VlcPlayerActivity extends BaseActivity implements MediaPlayer.Event
|
|||||||
} else if (id == R.id.stopBtn) {
|
} else if (id == R.id.stopBtn) {
|
||||||
stop();
|
stop();
|
||||||
} else if (id == R.id.subTracksBtn) {
|
} else if (id == R.id.subTracksBtn) {
|
||||||
subTrackMenu.show();
|
subTrackMenu.show(mediaPlayer.getSpuTrack());
|
||||||
subTrackMenu.getMenu().getItem(mediaPlayer.getSpuTrack()).setChecked(true);
|
|
||||||
} else if (id == R.id.audioTracksBtn) {
|
} else if (id == R.id.audioTracksBtn) {
|
||||||
audioTrackMenu.show();
|
audioTrackMenu.show(mediaPlayer.getAudioTrack());
|
||||||
audioTrackMenu.getMenu().getItem(mediaPlayer.getAudioTrack()).setChecked(true);
|
|
||||||
} else if (id == R.id.playListBtn) {
|
} else if (id == R.id.playListBtn) {
|
||||||
playListMenu.show();
|
playListMenu.show(Utils.playIndex);
|
||||||
playListMenu.getMenu().getItem(Utils.playIndex).setChecked(true);
|
} else if (id == R.id.scaleBtn){
|
||||||
|
scaleTypeMenu.show(Utils.getVlcScaleTypeName(mediaPlayer.getVideoScale().name()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onMenuItemClick(MenuItem menuItem) {
|
|
||||||
int groupid = menuItem.getGroupId();
|
|
||||||
int itemid = menuItem.getItemId();
|
|
||||||
if(groupid == TrackType_Subtitle){
|
|
||||||
mediaPlayer.setSpuTrack(itemid);
|
|
||||||
return true;
|
|
||||||
}else if(groupid == TrackType_Audio){
|
|
||||||
mediaPlayer.setAudioTrack(itemid);
|
|
||||||
return true;
|
|
||||||
}else if(groupid == TrackType_Playlist){
|
|
||||||
Utils.playIndex = itemid;
|
|
||||||
play();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
16
app/src/main/res/drawable/popmenu_focus.xml
Normal file
16
app/src/main/res/drawable/popmenu_focus.xml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:state_focused="true">
|
||||||
|
<shape>
|
||||||
|
<corners android:radius="0dp" />
|
||||||
|
<stroke android:width="0dp" android:color="@color/color_FFFFFF" />
|
||||||
|
<solid android:color="@color/color_6C3D3D3D" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
<item android:state_focused="false">
|
||||||
|
<shape>
|
||||||
|
<corners android:radius="0dp" />
|
||||||
|
<solid android:color="@color/color_66000000"/>
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
</selector>
|
@ -131,6 +131,28 @@
|
|||||||
android:src="@drawable/ic_outline_skip_next_48"
|
android:src="@drawable/ic_outline_skip_next_48"
|
||||||
android:focusable="true"/>
|
android:focusable="true"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/speedBtn"
|
||||||
|
android:layout_width="@dimen/button_width"
|
||||||
|
android:layout_height="@dimen/button_height"
|
||||||
|
android:layout_marginLeft="@dimen/button_margin_left"
|
||||||
|
android:background="@drawable/shape_user_focus"
|
||||||
|
android:textSize="@dimen/title_size"
|
||||||
|
android:focusable="true" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/scaleBtn"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:minWidth="@dimen/button_width"
|
||||||
|
android:layout_height="@dimen/button_height"
|
||||||
|
android:layout_marginLeft="@dimen/button_margin_left"
|
||||||
|
android:background="@drawable/shape_user_focus"
|
||||||
|
android:paddingLeft="10dp"
|
||||||
|
android:paddingRight="10dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:textSize="@dimen/title_size"
|
||||||
|
android:focusable="true" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/subTracksBtn"
|
android:id="@+id/subTracksBtn"
|
||||||
android:layout_width="@dimen/button_width"
|
android:layout_width="@dimen/button_width"
|
||||||
|
8
app/src/main/res/layout/popmenu.xml
Normal file
8
app/src/main/res/layout/popmenu.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:padding="0dp"
|
||||||
|
android:layout_margin="0dp" >
|
||||||
|
</LinearLayout>
|
14
app/src/main/res/layout/popmenu_item.xml
Normal file
14
app/src/main/res/layout/popmenu_item.xml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:minWidth="100dp"
|
||||||
|
android:maxWidth="300dp"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:layout_margin="0dp"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="20dp"
|
||||||
|
android:background="@drawable/popmenu_focus"
|
||||||
|
android:focusable="true" >
|
||||||
|
|
||||||
|
</TextView>
|
@ -4,4 +4,7 @@
|
|||||||
<item name="android:background">@null</item>
|
<item name="android:background">@null</item>
|
||||||
<item name="android:windowBackground">@drawable/app_bg</item>
|
<item name="android:windowBackground">@drawable/app_bg</item>
|
||||||
</style>
|
</style>
|
||||||
|
<style name="popmenuStyle" parent="@android:style/Widget.PopupMenu">
|
||||||
|
<item name="android:popupBackground">@color/color_6CFFFFFF</item><!-- popMenu的背景色-->
|
||||||
|
</style>
|
||||||
</resources>
|
</resources>
|
Loading…
x
Reference in New Issue
Block a user