如何在Android中创建以下布局?
我想要一个"标题",即一直保持不变的标题.唯一应该改变的是标题下面的区域.
把它想象成一个网页,其中内容区域是它发生的全部=)
+--------------------+
| H E A D E R |
+--------------------+
| |
| |
| |
| C O N T E N T |
| |
| |
| |
+--------------------+
Run Code Online (Sandbox Code Playgroud)
当然,它很容易创建一个LinearLayot,在顶部添加一个视图,然后在下面添加另一个视图 - tada!但是接下来的是你如何"设置"或设计项目,以便轻松改变内容中的内容.
我真正想要的是能够"滑动"(参见这里)该区域,然后只是"滚入"内容区域中的新视图/事物,但保持相同的标题.
我真正想念的是一个综合的layoyt示例库...
问候
在我发现(遗憾地)没有简单的方法在View周围创建一个简单的边框之后,我被迫使用9-patch-image方法在我的View周围获得边框.
所以我读了9-patch上的简短内容,它很容易理解.我开始使用Android SDK附带的"Draw 9-patch"应用程序,打开了一个我在Paint中创建的非常简单的图像然后......我卡住了.
根据页面(http://developer.android.com/guide/developing/tools/draw9patch.html),我应该能够定义图像可以展开的区域等等,只需单击边缘( "在1像素周长内单击以绘制定义可伸展贴片的线条......").
所以我尽力做到这一点,绝对没有任何反应.我试图在点击时按住SHIFT并按下鼠标右键,没有任何反应.当我将鼠标从1像素的边界移开时,我得到一个灰红色的"选框"(条纹).
底线是:无论我做什么,都没有任何反应.
我正在为我的Android应用程序使用Google Cloud Messaging(GCM)服务.我已经按照所有规则实现了它,并且它有效.好吧,差不多.
大多数情况下,我会说在60-70%的情况下,我可以使用谷歌网页上讨论的网络服务从我的服务器成功发送GCM消息.
通常,我从webservice获得以下回复,表明我成功发送了GCM消息:
{
"multicast_id":8378088572050307085,
"success":1,
"failure":0,
"canonical_ids":0,
"results":
[
{
"message_id":"0:1363080282442710%7c4250c100000031"
}
]
}
Run Code Online (Sandbox Code Playgroud)
这就是说:一切OK,发送的消息.
但是,在许多情况下,我在调用Web服务时遇到HTTP错误,其中说:
无法从传输连接读取数据:已建立的连接已被主机中的软件中止.
这是.NET消息,告诉我调用webservice(使用HttpWebRequest和POST)失败.
这是一些显示问题的日志消息:

这是我用来调用WS的代码:
public static string SendMessage(string registrationId, string command, string extra, bool retry)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://android.googleapis.com/gcm/send");
request.Method = PostWebRequest;
request.KeepAlive = false;
GCMPostPacket json = new GCMPostPacket()
{
collapse_key = "1",
time_to_live = 60,
registration_ids = new List<string>(new string[] { registrationId }),
data = new GcmData()
{
message = command,
misc = extra
}
}; …Run Code Online (Sandbox Code Playgroud) 我在使用Newtonsoft.Json SerializeObject方法时遇到了一个错误.之前有人问过这个问题,但与Newtonsoft合作的人没有回答为什么会这样.
基本上,这样打电话时SerializeObject:
string json = Newtonsoft.Json.JsonConvert.SerializeObject(from, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All });
Run Code Online (Sandbox Code Playgroud)
我Equals在我的类中覆盖了很多方法中的错误:
public override bool Equals(object obj)
{
if (obj == null)
return false;
CapacityConfiguration cc = (CapacityConfiguration)obj; // <-- TypeCastException here; other Properties of the same class are sent in as parameter!
}
Run Code Online (Sandbox Code Playgroud)
当然,通过这样检查,我意识到修复起来很"容易":
public override bool Equals(object obj)
{
if (obj is CapacityConfiguration == false)
return false;
CapacityConfiguration cc = (CapacityConfiguration)obj;
}
Run Code Online (Sandbox Code Playgroud)
但真正的问题是:
为什么Json.Net在类的Equals方法中发送其他类型的对象?更具体地说,Json.Net似乎在类中发送了许多其他属性,而不是相同类型的另一个对象.
对我来说,这完全是奇怪的.任何输入将不胜感激. …
暂时,我有一个自定义视图,其中9个补丁图像作为边框.
该自定义视图在LinearLayout中放置了三次,因此它看起来像这样:
+------------------------+
| CustomView |
+------------------------+
| CustomView |
+------------------------+
| CustomView |
+------------------------+
Run Code Online (Sandbox Code Playgroud)
我已将一个click事件监听器附加到View,因此它是可单击的.但后来我点击它,我无法看到我点击它 - 颜色没有变化.
所以,我认为我会附加一个"onPress"监听器,然后改变视图的背景,但我找不到这样的监听器.
所以,问题是 - 如何在View上创建行为,以便我可以看到它被按下了?这通常在Android中完成,带有绿色背景,表示现在正在按下它.
问候
在我的Android清单中,它说:
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="16" />
Run Code Online (Sandbox Code Playgroud)
但是当我编写这段代码时,最后的getNotification会让我警告说该方法是"已弃用":
Notification myNotification = new Notification.Builder(appContext)
.setContentTitle("SIC")
.setContentText(tickerText)
.setWhen(when)
.setDefaults(Notification.DEFAULT_SOUND)
.setAutoCancel(true)
.setContentIntent(contentIntent)
.getNotification(); // <-- warning here
Run Code Online (Sandbox Code Playgroud)
现在,问题是对于API级别10,这是我正在开发的最小值,getNotification是唯一可以使用的.名为"build()"的新方法适用于API级别16.
那么,为什么我得到了被弃用的警告,即使它是唯一可以和应该使用的警告?有人可能认为警告/文档应该适应minSdkLevel,而不是高等级的......
所以,很长一段时间我都认为我知道如何阻止屏幕进入睡眠模式,我只是在我的Activity中使用了这段代码:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)
但是,我意识到这只适用于我的手机处于"开发人员模式"时,即启用/检查USB调试(设置 - >开发人员选项 - > USB调试)时.然后,上述代码确实阻止屏幕/设备进入睡眠状态.
当没有检查那个调试时,我的屏幕就像没有明天一样进入睡眠状态.我在我的设备上运行Android 4.04,并且
android:minSdkVersion="12"
android:targetSdkVersion="16"
Run Code Online (Sandbox Code Playgroud)
有谁听说过这个问题?
编辑
我已经使用Commonswares建议进行了测试,并将setKeepScreenOn()添加到代码中,所以它看起来像这样:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
View root = findViewById(android.R.id.content);
if (root != null)
root.setKeepScreenOn(true);
Run Code Online (Sandbox Code Playgroud)
我也检查了这个代码实际执行,它是.但它并没有改变一件事......
所以,我刚刚在运行Lion的MacBook上安装了MonoTouch所需的一切.
我按照步骤/说明进行安装(参见此处),然后创建了一个新的解决方案.当我打开我的xib文件时,我收到以下错误(在MonoDevelop中):
更新Objective-C类型信息时出错.没有得到项目信息
的System.Exception:没有得到项目信息
在MonoDevelop.Macdev.XcodeSyncing.XcodeProjectTracker.UpdateTypes(IProgressMonitor的显示器,布尔力)[0x00029在/Users/builder/data/lanes/monodevelop-mac-2.8.6.4 /ca00645c/source/monodevelop/main/src/addins/MonoDevelop.MacDev/XcodeProjectTracker.cs:351
除了安装Xcode,然后是Framework/Runtime(MRE-2.10.8_3),然后是MonoDevelop(2.8.6.4),然后是MonoTouch,我什么都没做.
有人见过这个吗?我在网上的这个特定错误中找不到一件事.
我想要弹出一个表现!=)
问题是弹出窗口"填充整个屏幕的宽度",即使布局清楚地表明它应该"wrap_content".如果我使用Dialog或PopupWindow无关紧要.
首先,弹出窗口的XML布局,popup_message.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="20dp"
android:background="@android:color/transparent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="horizontal"
android:layout_gravity="center" >
<TextView
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:background="@android:color/transparent"
android:gravity="center_vertical|center_horizontal"
android:orientation="horizontal"
android:paddingLeft="10dp"
android:text="@string/new_message"
android:textColor="#000000"
android:textAllCaps="true" >
</TextView>
</LinearLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"
android:background="#ffffff"
android:gravity="center_horizontal"
android:orientation="vertical" >
<TextView
android:id="@+id/popup_message_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textCursorDrawable="@null" >
</TextView>
<Button
android:id="@+id/jobview_pickup_start_submit"
android:layout_width="fill_parent"
android:layout_height="35dp"
android:layout_below="@+id/popup_message_textView"
android:layout_gravity="center_vertical|center_horizontal"
android:layout_marginBottom="15dp"
android:layout_marginTop="15dp"
android:gravity="center_horizontal"
android:text="Confirm"
android:textColor="#000000" />
</RelativeLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我正在使用的代码:
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View input = inflater.inflate(R.layout.popup_message, null);
PopupWindow pw = new PopupWindow(input, LayoutParams.WRAP_CONTENT, …Run Code Online (Sandbox Code Playgroud) SO 上已经有很多关于这个主题的问题(一、二、三、四)。然而,到目前为止我找到的答案都不能解决我的问题。
问题是ActivityCompat.requestPermissions不会触发弹出窗口,要求用户授予通知权限。
设置:
<uses-permission android:name="android.permission.POST_NOTIFICATION" />if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_DENIED)
{
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.POST_NOTIFICATIONS}, 1);
}
Run Code Online (Sandbox Code Playgroud)
回调如下:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainScreenActivity.this, "Woho, you have enabled notifications!", Toast.LENGTH_SHORT).show(); …Run Code Online (Sandbox Code Playgroud) android ×8
.net ×1
c# ×1
dialog ×1
equals ×1
http ×1
json ×1
json.net ×1
mono ×1
monodevelop ×1
popupwindow ×1
screen ×1
sdk ×1
serializer ×1
xamarin.ios ×1