每当我创建一个新项目时,Android Studio
都希望将它放在一个类似于(取决于OS - Ubuntu)的位置的通用默认文件夹中:
/home/USER/AndroidStudioProjects/
Run Code Online (Sandbox Code Playgroud)
我想将此目录更改为其他位置.除了在创建每个项目时选择这个新位置,是否有设置(找不到)或path variable
(找不到任何文档)可以将此目录(例如/home/USER/Projects/AndroidStudio/
)设置为默认值?
类似于在Eclipse中更改工作空间的东西是我正在寻找的.
我在我正在构建的应用程序中遇到此问题.请忽略所有设计缺点和缺乏最佳实践方法,这纯粹是为了展示我无法解决的一个例子.
我有DialogFragment
一个AlertDialog
使用自定义View
设置返回基本AlertDialog.Builder.setView()
.如果这View
有特定的大小要求,我如何Dialog
正确调整自身大小以显示自定义中的所有内容View
?
这是我一直使用的示例代码:
package com.test.test;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); …
Run Code Online (Sandbox Code Playgroud) java android android-layout android-alertdialog android-dialogfragment
我暂时没有更新我的Android Studio,在尝试更新时会显示此对话框:
通常会有"更新并重新启动"选项,但不在此处.唯一的选择是"下载",它指示我在这里我只能再次下载整个包,这给了我一个Build Number - 130.737825的链接.你可以在我已经拥有之前看到它,所以我不明白这将如何解决这个问题?
我觉得我错过了一些明显的东西,但我怎么能像以前一样更新?
目标只是绘制一个位图,并在其顶部绘制消除位图底层区域的形状.
我创建了简单的概念证明代码,试图理解我应该如何去做.在这里的各种线程中,我发现了许多关于使用的提示:
android.graphics.PorterDuff.Mode.CLEAR
Run Code Online (Sandbox Code Playgroud)
下面的代码只是创建一个蓝色背景的屏幕,并添加自定义视图.此视图在其画布上绘制粉红色背景,位图图像(带有轻微边框以显示粉红色背景),黄色覆盖圆圈表示每个PorterDuffXfermode.
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuffXfermode;
import android.graphics.Paint.Style;
import android.graphics.PorterDuff.Mode;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.RelativeLayout;
public class Test extends Activity {
Drawing d = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
RelativeLayout.LayoutParams rlp = null;
// Create the view for the xfermode test
d = new Drawing(this);
rlp = new RelativeLayout.LayoutParams(600, 900);
rlp.addRule(RelativeLayout.CENTER_IN_PARENT);
d.setLayoutParams(rlp);
RelativeLayout rl = new RelativeLayout(this); …
Run Code Online (Sandbox Code Playgroud) 我在使用repo
Android源代码的最小方面遇到了很多简短的问题,或者对我们使用的内容进行了非常广泛的定义,repo
结果并没有真正理解发生了什么repo
.我按照Android Source网站上的说明操作.我这样做是repodir
因为所有文件都与此相关.
repo init -u https://android.googlesource.com/platform/manifest
repo sync
Run Code Online (Sandbox Code Playgroud)
完成后,我的文件夹中充满了android类型文件夹(bionic
,bootable
等等)和一个隐藏.repo
文件夹.值得注意的是,有一个ics-mr1
与特定版本相关的文件夹,repodir
它本身包含了大部分相同的文件夹.
repo init -u https://android.googlesource.com/platform/manifest -b gingerbread
repo sync
Run Code Online (Sandbox Code Playgroud)
这相对较快地完成,我看到的主要变化是现在有一个名为的文件夹gingerbread
(所有原始文件夹似乎都保留).
我现在尝试这个并且需要时间:
repo init -u https://android.googlesource.com/platform/manifest -b android_4.2.2_r1
repo sync
Run Code Online (Sandbox Code Playgroud)
之后,它仍然包含相同的gingerbread
和ics-mr1
一些新的随机文件夹(如abi
),但似乎没有任何新版本.
从结果来看,我看到我真的不明白我的行为到底是做什么以及如何实现我想要的.
如何获取master
源的整个分支的本地版本,然后在我认为合适的情况下在分支之间正确更改?我现在的方式似乎是错误的,因为分支更改后留下的文件似乎不合逻辑.
为了进一步说明,有没有一种有效的方法同时拥有众多分支的本地副本,以便我可以比较每个分支的组成部分(显然每次都不重新下载它们)?
我问这些问题有很大的理解(我无法找到明确的一致信息),所以任何有关答案的额外信息都有助于理解实际做的事情.
我有一个类定义给定屏幕的所有基本参数.从这里,应用程序中的每个屏幕都是此类的子类.我需要每个屏幕(即子类)在其实现中设置变量的值(即,每个屏幕必须定义它在导航树中的级别).
另外,理想情况下,这个变量应该final
是在子类中设置的时候(我意识到这可能是不可能的).
最好的方法是什么?有没有办法在Java中正确执行这种类型的行为?
使用时AutoCompleteTextView
,会出现下拉建议列表,软件键盘仍然可见.这是有道理的,因为输入随后的字符以缩小列表通常会更有效.
但是,如果用户想要浏览建议列表,则软件键盘仍处于运转状态时变得非常繁琐(当设备处于横向时,这更是一个问题).如果没有键盘占用屏幕空间,导航列表会容易得多.不幸的是,当您按下后退键时,默认行为会首先删除列表(即使在后退键的软件版本中,它显示的图像显示"按此键将隐藏键盘").
这是一个准系统示例,演示了我在说什么:
public class Main2 extends Activity {
private static final String[] items = {
"One",
"Two",
"Three",
"Four",
"Five"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AutoCompleteTextView actv = new AutoCompleteTextView(this);
actv.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
actv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items));
actv.setThreshold(1);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
ll.addView(actv);
setContentView(ll);
}
}
Run Code Online (Sandbox Code Playgroud)
除了这是不直观的事实(后面的键提示暗示背压将被发送到键盘),它使得导航AutoCompleteTextView
建议非常无聊.
什么是最不具侵入性的方式(例如,onBackPressed()
在每个活动中捕获后面并相应地路由它肯定不是理想的)使第一次按下后隐藏键盘,第二次删除建议列表?
keyboard android autocompletetextview android-softkeyboard onbackpressed
目标是将a转换Bitmap
为a byte []
,在Bundle
数据中的活动之间传递,然后将其重新转换回Bitmap
稍后阶段以便在a中显示Imageview
.
问题在于,每当我尝试这个时,我只得到一个空位图和非描述性,无用的日志输出:
12-07 17:01:33.282: D/skia(2971): --- SkImageDecoder::Factory returned null
我看过以下解决方案:
突出显示copyPixelsToBuffer()对.compress至关重要
(特别是因为在这种情况下没有必要).
我已经运行了以下测试用例,这肯定会将问题缩小到转换和恢复代码.根据我的调试,有正确的解码,字节数组是正确的大小和完整,位图配置被迫是相同的,decodeByteArray
只是失败:
package com.example.debug;
import java.nio.ByteBuffer;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.Menu;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class MainActivity extends Activity {
RelativeLayout rl = null;
RelativeLayout.LayoutParams rlp = null;
ImageView ivBef = null;
ImageView ivAft = null;
Bitmap bmBef = null;
Bitmap bmAft = null; …
Run Code Online (Sandbox Code Playgroud) 我一直有非常奇怪的问题Fragments
和方向更改导致强制关闭而不遵循逻辑模式.
我创建了一个简单Activity
和Fragment
生命周期调试应用程序,它只是实现的每一步活动的生命周期和片段的生命周期由报告调用logcat的.
以下是TestActivity
和TestFragment
类:
测试活动
public class TestActivity extends Activity {
Context ct = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("ACT", "onCreate called");
ct = getApplicationContext();
FrameLayout fl = new FrameLayout(ct);
fl.setId(1000);
TestFragment tf = new TestFragment();
getFragmentManager().beginTransaction().add(fl.getId(), tf, "").commit();
setContentView(fl);
}
@Override
protected void onStart() {
Log.e("ACT", "onStart called");
super.onStart();
}
@Override
protected void onResume() {
Log.e("ACT", "onResume called");
super.onResume();
}
@Override
protected void …
Run Code Online (Sandbox Code Playgroud) android android-lifecycle android-fragments android-activity
我面临的情况是,在我的应用程序中,我有一个单一窗格和双窗格样式布局.对于每种不同的布局样式,我使用的功能可以在给定所需的屏幕时正确设置布局,而不是单独处理屏幕之间可能的每一个导航操作.
它基本上是switch
应用程序switch
中每个屏幕的语句,每个屏幕都有一个嵌套语句来处理每种布局样式.这就是我在代码中所说的:
protected void setupScreen() {
switch(currentScreen) {
case SCREEN_ONE:
switch(currentLayout) {
case SINGLE_PANE:
// Perform actions to setup the screen
break;
case DUAL_PANE:
// Perform actions to setup the screen
break;
}
break;
case SCREEN_TWO:
switch(currentLayout) {
case SINGLE_PANE:
// Perform actions to setup the screen
break;
case DUAL_PANE:
// Perform actions to setup the screen
break;
}
break
// ... etc ....
}
}
Run Code Online (Sandbox Code Playgroud)
在我要执行设置屏幕操作的部分中,这包括以下基本三个操作:
// Create the …
Run Code Online (Sandbox Code Playgroud)