- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的播放器 Activity 有问题,我无法恢复播放。这是代码。
public class PlayerActivity extends AppCompatActivity implements SeekBar.OnSeekBarChangeListener, ExoPlayer.EventListener {
public static boolean incomingCall;
//object of timer
private Timer mTimer_heartBeat;
//timer task
private TimerTask mTimerTask_heartBeat;
//actions in player
private String mStr_output;
//checking heart beat started
private boolean mBoolean_heartbeatStarted = false;
//exoplayer
public static SimpleExoPlayerView sExoPlayerView;
public static SimpleExoPlayer player;
private static DataSource.Factory mediaDataSourceFactory;
private static EventLogger eventLogger;
BandwidthMeter bandwidthMeter;
static Handler mainHandler;
static MediaSource[] mediaSources;
static String mediaUrl = "";
ListAdapterDrawer listAdapterDrawer;
DrawerLayout mDrawerLayout;
ListView lv_drawer_player;
NavigationView navigation_view;
SeekBar seekbar_player;
static TextView tv_start_player, tv_end_player;
RelativeLayout rl_infopanel_player;
LinearLayout ll_controlpanel_player;
Helper helper;
FrameLayout bg_black;
Handler seekHandler;
ImageView iv_arrow_player;
ProgressBar progressBar;
private final Handler mHandler = new Handler();
// Create a list to contain the PlaylistItems
// protected static List<PlaylistItem> sList_play = new ArrayList<>();
public static ArrayList<MediaList> fullChannelList = new ArrayList<MediaList>();
public static int playerPos;
private String imageLogo;
ImageView bg_image;
boolean isLiveChannel = false;
private boolean isplaying = false;
Intent intent;
public static boolean isInPlayer = false;
private boolean isresume = false;
static Bundle savedInstanceState;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.savedInstanceState = savedInstanceState;
Constants.resume = false;
intent = getIntent();
if (intent.getStringExtra("playType") != null) {
if (intent.getStringExtra("playType").equals("CHA")) {
setContentView(R.layout.drawer_player);
isLiveChannel = true;
}
} else {
isLiveChannel = false;
setContentView(R.layout.new_player_layout);
}
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
sExoPlayerView = (SimpleExoPlayerView) findViewById(R.id.playerView);
progressBar = (ProgressBar) findViewById(R.id.pb_player);
iv_arrow_player = (ImageView) findViewById(R.id.iv_arrow_player);
iv_arrow_player.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDrawerLayout.openDrawer(Gravity.RIGHT);
}
});
bg_image = (ImageView) findViewById(R.id.bg_image);
bg_black = (FrameLayout) findViewById(R.id.bg_black);
progressBar.setVisibility(View.GONE);
permissions();
if (intent.getStringExtra("url") != null) {
mediaUrl = intent.getStringExtra("url");
Log.i("mediaUrl+-", mediaUrl);
imageLogo = intent.getStringExtra("logo");
}
helper = new Helper();
MediaController();
fullChannelList = Constants.fullChannelList;
if (intent.getStringExtra("playType") != null) {//for live channel
if (intent.getStringExtra("playType").equals("CHA")) {
if ((imageLogo != null) && (imageLogo.contains("fm"))) {
bg_black.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
bg_image.setVisibility(View.VISIBLE);
bg_black.setVisibility(View.VISIBLE);
Picasso.with(this).load(FirtTimeParsing.imageUrl + imageLogo).into(bg_image);
} else {
bg_image.setVisibility(View.GONE);
bg_black.setVisibility(View.INVISIBLE);
}
initPlayer();
drawerSetUp();
ll_controlpanel_player.setVisibility(View.GONE);
}
} else {
initPlayer();
bg_image.setVisibility(View.GONE);
bg_black.setVisibility(View.INVISIBLE);
iv_arrow_player.setVisibility(View.GONE);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.setStatusBarColor(Color.TRANSPARENT);
}
}
private void permissions() {
//set run time permissions
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
checkSelfPermission(Manifest.permission.READ_PHONE_STATE);
if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE)) {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 0);
}
}
}
}
private void initPlayer() {
// sExoPlayerView.setControllerVisibilityListener((PlaybackControlView.VisibilityListener) sActivity_player);
mediaDataSourceFactory = buildDataSourceFactory(true);
mainHandler = new Handler();
bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory videoTrackSelectionFactory =
new AdaptiveTrackSelection.Factory(bandwidthMeter);
MappingTrackSelector trackSelector =
new DefaultTrackSelector(videoTrackSelectionFactory);
eventLogger = new EventLogger(trackSelector);
// 2. Create a default LoadControl
LoadControl loadControl = new DefaultLoadControl();
// 3. Create the player
player = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);
sExoPlayerView.setPlayer(player);
sExoPlayerView.setBackgroundColor(Color.parseColor("#000000"));
seekbar_player = (SeekBar) sExoPlayerView.findViewById(R.id.seekbar_player);
tv_end_player = (TextView) sExoPlayerView.findViewById(R.id.tv_end_player);
tv_start_player = (TextView) sExoPlayerView.findViewById(R.id.tv_start_player);
rl_infopanel_player = (RelativeLayout) sExoPlayerView.findViewById(R.id.rl_infopanel_player);
ll_controlpanel_player = (LinearLayout) sExoPlayerView.findViewById(R.id.ll_controlpanel_player);
seekbar_player.setOnSeekBarChangeListener(this);
player.addListener(this);
loadPlayer();
}
private DataSource.Factory buildDataSourceFactory(boolean useBandwidthMeter) {
return ((BaseApplication) getApplication())
.buildDataSourceFactory(useBandwidthMeter ? (DefaultBandwidthMeter) bandwidthMeter : null);
}
private void loadPlayer() {
if (!isInPlayer) {
isInPlayer = true;
sExoPlayerView.setVisibility(View.VISIBLE);
mediaSources = new MediaSource[1];
Uri myUri = Uri.parse(mediaUrl);
mediaSources[0] = new HlsMediaSource(myUri, mediaDataSourceFactory, mainHandler, eventLogger);
MediaSource mediaSource = mediaSources.length == 1 ? mediaSources[0]
: new ConcatenatingMediaSource(mediaSources);
boolean haveResumePosition = false;
player.prepare(mediaSource, !haveResumePosition, false);
sExoPlayerView.setPlayer(player);
player.setPlayWhenReady(true);
if (!isLiveChannel) {
player.seekTo((long) Constants.seekto);
updateProgressBar();
}
Log.d("Time==", "play time " + new Date());
}
}
private void drawerSetUp() {
listAdapterDrawer = new ListAdapterDrawer(this, fullChannelList);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);
lv_drawer_player = (ListView) findViewById(R.id.lv_drawer_player);
navigation_view = (NavigationView) mDrawerLayout.findViewById(R.id.navigation_view);
lv_drawer_player.setAdapter(listAdapterDrawer);
lv_drawer_player.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (!mediaUrl.equals(fullChannelList.get(position).getMediaUrl())) {
playclick(position);
mDrawerLayout.closeDrawer(Gravity.END);
} else {
mDrawerLayout.closeDrawer(Gravity.END);
}
}
});
}
public void playclick(int position) {
isInPlayer = false;
mediaUrl = fullChannelList.get(position).getMediaUrl();
imageLogo = fullChannelList.get(position).getLogo();
playerPos = position;
player.stop();
player.clearVideoSurface();
initPlayer();
}
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
long totalDuration = 0;
//sometime -ve value getting
if (player.getDuration() > 0) {
totalDuration = player.getDuration();
}
long currentDuration = player.getCurrentPosition();
// Displaying Total Duration time
// Log.d("mUpdateTimeTask==", "totalDuration " + totalDuration);
tv_end_player.setText("" + helper.milliSecondsToTimer(totalDuration));
// Displaying time completed playing
tv_start_player.setText("" + helper.milliSecondsToTimer(currentDuration));
// Updating progress bar
int progress = (int) (helper.getProgressPercentage(currentDuration, totalDuration));
//Log.d("Progress", ""+progress);
seekbar_player.setProgress(progress);
sExoPlayerView.setControllerShowTimeoutMs(5000);
sExoPlayerView.showController();
// Running this thread after 100 milliseconds
mHandler.postDelayed(this, 100);
}
};
public void updateProgressBar() {
seekHandler = new Handler();
seekHandler.postDelayed(mUpdateTimeTask, 100);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// Set fullscreen when the device is rotated to landscape
//satatus bar color setting
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.setStatusBarColor(Color.TRANSPARENT);
}
bg_black.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
// sJwPlayerView.setFullscreen(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE, true);
super.onConfigurationChanged(newConfig);
}
@Override
protected void onResume() {
//satatus bar color setting
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.setStatusBarColor(Color.TRANSPARENT);
}
// Let JW Player know that the app has returned from the background JWPlayerView.onResume();
// sJwPlayerView.onResume();
// InitialDataFromServer login = new InitialDataFromServer(PlayerActivity.this);
// Constants.playerPosition = 0;
// login.PlayRequest(Constants.mediaId, Constants.start_play);
// loadPlayer();
// isInPlayer = false;
super.onResume();
}
@Override
protected void onPause() {
isresume = true;
// Let JW Player know that the app is going to the background JWPlayerView.onPause();
if (Constants.isPlaying) {
// sJwPlayerView.stop();
Constants.isPlaying = false;
Constants.playerPosition = player.getCurrentPosition();
isplaying = false;
player.stop();
player.release();
}
// stopPlayer();
super.onPause();
}
@Override
protected void onStop() {
try {
player.stop();
player.release();
// stopPlayer();
super.onStop();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
@Override
public void onBackPressed() {
stopPlayer();
super.onBackPressed();
if (isdirect) {
InitialDataFromServer initialDataFromServer = new InitialDataFromServer(PlayerActivity.this);
initialDataFromServer.login();
}
}
@Override
public void onDestroy() {
// stopPlayer();
Constants.isPlayPressed = false;
player.stop();
player.release();
super.onDestroy();
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// remove message Handler from updating progress bar
seekHandler.removeCallbacks(mUpdateTimeTask);
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
mHandler.removeCallbacks(mUpdateTimeTask);
long totalDuration = player.getDuration();
int currentPosition = helper.progressToTimer(seekBar.getProgress(), totalDuration);
Log.d("onStopTrackingTouch==", "currentPosition " + currentPosition);
// forward or backward to certain seconds
player.seekTo(currentPosition);
// update timer progress again
updateProgressBar();
}
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {
}
@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
}
@Override
public void onLoadingChanged(boolean isLoading) {
}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == ExoPlayer.STATE_ENDED) {//for close this activity after finish movie
Log.d("onPlayerStateChanged==", "STATE_ENDED==");
Constants.playerPosition = 0;
InitialDataFromServer initialDataFromServer = new InitialDataFromServer(PlayerActivity.this);
initialDataFromServer.PlayRequest(Constants.mediaId, Constants.stop_play);
isplaying = false;
sExoPlayerView.hideController();
progressBar.setVisibility(View.GONE);
}
if (playbackState == ExoPlayer.STATE_BUFFERING) {
Log.d("onPlayerStateChanged==", "STATE_BUFFERING==");
progressBar.setVisibility(View.VISIBLE);
isplaying = false;
sExoPlayerView.setControllerShowTimeoutMs(5000);
sExoPlayerView.showController();
}
if (playbackState == ExoPlayer.STATE_READY) {
Log.d("onPlayerStateChanged==", "STATE_READY==");
progressBar.setVisibility(View.GONE);
isplaying = true;
if ((imageLogo != null) && (imageLogo.contains("fm"))) {
bg_black.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
bg_image.setVisibility(View.VISIBLE);
bg_black.setVisibility(View.VISIBLE);
Picasso.with(this).load(FirtTimeParsing.imageUrl + imageLogo).into(bg_image);
} else {
bg_image.setVisibility(View.GONE);
bg_black.setVisibility(View.GONE);
}
sExoPlayerView.setControllerShowTimeoutMs(5000);
sExoPlayerView.showController();
Log.i("Video_format++", String.valueOf(player.getRendererType(1)));
if (!isLiveChannel) {
setController();
heartbeat();
}
}
}
private void setController() {
sExoPlayerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
sExoPlayerView.setControllerShowTimeoutMs(3000);
sExoPlayerView.showController();
ll_controlpanel_player.setVisibility(View.VISIBLE);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
ll_controlpanel_player.setVisibility(View.GONE);
}
}, 3000);
}
return true;
}
});
}
private void stopPlayer() {
if (player.isLoading() || isplaying) {
isplaying = false;
player.stop();
player.release();
Constants.playerPosition = player.getCurrentPosition();
Log.i("currentPosition", Constants.playerPosition + "");
if (!isLiveChannel) {
InitialDataFromServer initialDataFromServer = new InitialDataFromServer(PlayerActivity.this);
initialDataFromServer.PlayRequest(Constants.mediaId, Constants.stop_play);
if (isdirect) {
initialDataFromServer.login();
} else {
finish();
}
} else {
finish();
}
}
Constants.isPlayPressed = false;
isInPlayer = false;
if (mBoolean_heartbeatStarted) {
mTimer_heartBeat.cancel();
mTimerTask_heartBeat.cancel();
}
}
@Override
public void onPlayerError(com.google.android.exoplayer2.ExoPlaybackException error) {
}
@Override
public void onPositionDiscontinuity() {
}
String motion;
Float x1 = Float.valueOf(0), x2 = Float.valueOf(0), y1 = Float.valueOf(0), y2 = Float.valueOf(0), motionX = Float.valueOf(0), motionY = Float.valueOf(0);
String xdirection = "", ydirection = "", operation = null;
int mScrenHeight, mScreenWidth;
public void MediaController() {
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
// heartbeat();
mScrenHeight = displayMetrics.heightPixels;
mScreenWidth = displayMetrics.widthPixels;
Log.i("Display++", "Width: " + mScreenWidth + "\nHeight: " + mScrenHeight);
sExoPlayerView.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event) {
// Log.i("event++", event.toString());
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
x1 = event.getX();
y1 = event.getY();
break;
case MotionEvent.ACTION_UP:
x2 = event.getX();
y2 = event.getY();
if ((x2 - x1) > 0) {
motionX = x2 - x1;
xdirection = "+";
} else {
motionX = x1 - x2;
xdirection = "-";
}
if ((y2 - y1) > 0) {
motionY = y2 - y1;
ydirection = "-";
} else {
motionY = y1 - y2;
ydirection = "+";
}
if (motionX < motionY) {
motion = "vertical";
if (x1 > (mScreenWidth / 2)) {
operation = "volumeControll";
} else {
operation = "brightnessControll";
}
xdirection = "";
} else {
operation = "playbackControll";
motion = "horizontal";
ydirection = "";
}
Log.i("drag++", operation + xdirection + ydirection);
if (operation.equalsIgnoreCase("volumeControll")) {
if (motionY > mScreenWidth / 5) {
if (ydirection.equalsIgnoreCase("+")) {
if (player.getVolume() < 1) {
player.setVolume((float) (player.getVolume() + 0.1));
}
} else {
if (player.getVolume() > 0) {
player.setVolume((float) (player.getVolume() - 0.1));
}
}
Log.i("drag++", "volume:" + player.getVolume());
}
} else if (operation.equalsIgnoreCase("brightnessControll")) {
if (motionY > mScrenHeight / 5) {
WindowManager.LayoutParams lp = getWindow().getAttributes();
Float brightness = lp.screenBrightness;
Log.i("drag++", "Brightness:" + getWindow().getAttributes().screenBrightness);
if (ydirection.equalsIgnoreCase("+")) {
if (lp.screenBrightness < 255) {
lp.screenBrightness = brightness + 15;
getWindow().setAttributes(lp);
}
} else {
if (lp.screenBrightness > 0) {
lp.screenBrightness = brightness - 15;
getWindow().setAttributes(lp);
}
}
}
} else if (operation.equalsIgnoreCase("playbackControll")) {
if (motionX > mScreenWidth / 10) {
if (xdirection.equalsIgnoreCase("+")) {
if (isLiveChannel) {
if (0 < playerPos) {
playclick(playerPos - 1);
} else {
playclick(fullChannelList.size() - 1);
}
} else {
if (player.getCurrentPosition() < (player.getDuration() - 10000)) {
player.seekTo(player.getCurrentPosition() + 10000);
} else {
player.seekTo(player.getDuration() - 1000);
}
}
} else {
if (isLiveChannel) {
if (playerPos < fullChannelList.size() - 1) {
playclick(playerPos + 1);
} else {
playclick(0);
}
} else {
if (player.getCurrentPosition() > 10000) {
player.seekTo(player.getCurrentPosition() - 10000);
} else {
player.seekTo(100);
}
}
}
}
}
break;
}
return true;
}
});
}
public void heartbeat() {
int delay = 30; // delay for 0.03 sec.
int period = 10000; // repeat every 10 sec.
mTimer_heartBeat = new Timer();
mTimerTask_heartBeat = new TimerTask() {
@Override
public void run() {
mBoolean_heartbeatStarted = true;
Log.d("heartbeat==", "heartbeat");
Constants.playerPosition = player.getCurrentPosition();
if (isplaying) {
InitialDataFromServer login = new InitialDataFromServer(PlayerActivity.this);
login.PlayRequest(Constants.mediaId, Constants.heartbeat);
}
}
};
mTimer_heartBeat.schedule(mTimerTask_heartBeat, delay, period); // 10000 is time in ms
}
}
播放器工作正常。但是当设备锁定和 Activity 恢复时,播放器没有恢复播放。请帮我解决这个问题。提前致谢。
最佳答案
尝试使用以下代码更改简历
@Override
protected void onResume() {
//satatus bar color setting
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.setStatusBarColor(Color.TRANSPARENT);
}
if (isresume) {
isresume=false;
player.stop();
player.clearVideoSurface();
isInPlayer = false;
seekto = Constants.playerPosition;
initPlayer();
loadPlayer();
} else {
loadPlayer();
}
super.onResume();
}
关于android - Exoplayer 2 Player 无法恢复播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44322258/
我最近在/ drawable中添加了一些.gifs,以便可以将它们与按钮一起使用。这个工作正常(没有错误)。现在,当我重建/运行我的应用程序时,出现以下错误: Error: Gradle: Execu
Android 中有返回内部存储数据路径的方法吗? 我有 2 部 Android 智能手机(Samsung s2 和 s7 edge),我在其中安装了一个应用程序。我想使用位于这条路径中的 sqlit
这个问题在这里已经有了答案: What's the difference between "?android:" and "@android:" in an android layout xml f
我只想知道 android 开发手机、android 普通手机和 android root 手机之间的实际区别。 我们不能从实体店或除 android marketplace 以外的其他地方购买开发手
自Gradle更新以来,我正在努力使这个项目达到标准。这是一个团队项目,它使用的是android-apt插件。我已经进行了必要的语法更改(编译->实现和apt->注释处理器),但是编译器仍在告诉我存在
我是android和kotlin的新手,所以请原谅要解决的一个非常简单的问题! 我已经使用导航体系结构组件创建了一个基本应用程序,使用了底部的导航栏和三个导航选项。每个导航选项都指向一个专用片段,该片
我目前正在使用 Facebook official SDK for Android . 我现在正在使用高级示例应用程序,但我不知道如何让它获取应用程序墙/流/状态而不是登录的用户。 这可能吗?在那种情
我在下载文件时遇到问题, 我可以在模拟器中下载文件,但无法在手机上使用。我已经定义了上网和写入 SD 卡的权限。 我在服务器上有一个 doc 文件,如果用户单击下载。它下载文件。这在模拟器中工作正常但
这个问题在这里已经有了答案: What is the difference between gravity and layout_gravity in Android? (22 个答案) 关闭 9
任何人都可以告诉我什么是 android 缓存和应用程序缓存,因为当我们谈论缓存清理应用程序时,它的作用是,缓存清理概念是清理应用程序缓存还是像内存管理一样主存储、RAM、缓存是不同的并且据我所知,缓
假设应用程序 Foo 和 Eggs 在同一台 Android 设备上。任一应用程序都可以获取设备上所有应用程序的列表。一个应用程序是否有可能知道另一个应用程序是否已经运行以及运行了多长时间? 最佳答案
我有点困惑,我只看到了从 android 到 pc 或者从 android 到 pc 的例子。我需要制作一个从两部手机 (android) 连接的 android 应用程序进行视频聊天。我在想,我知道
用于使用 Android 以编程方式锁定屏幕。我从 Stackoverflow 之前关于此的问题中得到了一些好主意,并且我做得很好,但是当我运行该代码时,没有异常和错误。而且,屏幕没有锁定。请在这段代
文档说: android:layout_alignParentStart If true, makes the start edge of this view match the start edge
我不知道这两个属性和高度之间的区别。 以一个TextView为例,如果我将它的layout_width设置为wrap_content,并将它的width设置为50 dip,会发生什么情况? 最佳答案
这两个属性有什么关系?如果我有 android:noHistory="true",那么有 android:finishOnTaskLaunch="true" 有什么意义吗? 最佳答案 假设您的应用中有
我是新手,正在尝试理解以下 XML 代码: 查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 中的常量, public static final
在下面的代码中,为什么当我设置时单选按钮的外观会发生变化 android:layout_width="fill_parent" 和 android:width="fill_parent" 我说的是
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
假设我有一个函数 fun myFunction(name:String, email:String){},当我调用这个函数时 myFunction('Ali', 'ali@test.com ') 如何
我是一名优秀的程序员,十分优秀!