我是android和java的新手,我需要在android中创建一个简单的应用程序。我在此活动中有一个活动页面。这是我的活动页面
package com.tkcmu.dev;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import org.apache.http.client.ClientProtocolException;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class tkcmu extends Activity {
private ListView lv1;
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.main);
ArrayList<String> listItems = new ArrayList<String>();
try {
URL recentUrl = new URL(
"To some link");
URLConnection tc = recentUrl.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(tc.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
JSONArray ja = new JSONArray(line);
for (int i = 0; i < ja.length(); i++) {
JSONObject jo = (JSONObject) ja.get(i);
listItems.add(jo.getString("content"));
}
}
}catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
lv1=(ListView)findViewById(R.id.ListView01);
// By using setAdpater method in listview we an add string array in list.
lv1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , listItems));
}
}
我的main.xml
是这样的:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout01"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ListView
android:id="@+id/ListView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="10sp"
android:layout_marginRight="10sp"
android:layout_marginTop="10sp"
android:layout_weight="1"
android:background="@drawable/customshape"
android:cacheColorHint="#FFFFFF"
android:clickable="true"
android:clipToPadding="true"
android:dividerHeight="1px"
android:drawSelectorOnTop="false"
android:focusable="true"
android:focusableInTouchMode="true"
android:footerDividersEnabled="true"
android:headerDividersEnabled="true"
android:longClickable="true" />
</LinearLayout>
并且我在drawable中有customshape.xml
,这是
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="10dp" />
</shape>
我得到了结果,整个自定义列表部分变得弯曲,但我希望每行都有一个弯曲的背景。我在这里发布了我的整个代码(不包括AndroidManifest.xml
)所以如果有人告诉我在这段代码中我需要做什么更改,我们将不胜感激。任何机构都知道如何实施它。
答案 0 :(得分:4)
添加
android:background="@drawable/customshape"
到listview row.xml文件的根视图,而不是将其应用于listview
答案 1 :(得分:2)
我从来没有为圆角做过这个,但我会尝试为列表提供自定义适配器。自定义适配器允许您指定每个项目使用哪个视图。在您的情况下,您可以尝试提供带有圆角边框的视图(使用形状XML定义)。
为此,您将替换该行
lv1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , listItems));
使用BaseAdapter
实现getView()
方法。
有关于如何执行此操作的数百个教程,但this one似乎更详细。
答案 2 :(得分:1)
在适配器类中使用此布局并使此布局膨胀。在您的项目中导入最新的cardview库。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardCornerRadius="8dp"
card_view:cardUseCompatPadding="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/relative_card_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/country_photo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:contentDescription="@string/action_settings"
android:scaleType="centerCrop"
android:src="@drawable/sweden" />
<TextView
android:id="@+id/title_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:text="@string/app_name"
android:textColor="@color/colorAccent"
android:textSize="24sp"
android:textStyle="bold" />
</RelativeLayout>
<TextView
android:id="@+id/title_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:text="@string/app_name"
android:layout_below="@+id/relative_card_layout"
android:textColor="@color/colorAccent"
android:textSize="18sp"
android:padding="8dp"
android:textStyle="bold" />
</RelativeLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
答案 3 :(得分:1)
我建议您使用自定义适配器,您可以将形状设置为背景。这在那里很容易实现。但既然你是新手,那将会有点困难。所以有些东西我不推荐但可能是一个解决方案:按下android.R.layout.simple_list_item_1上的control + B.这是由Android团队编写的原始列表视图XML。因此,您必须覆盖此设置并在此处设置背景形状(您已编写的形状,将其设置为背景)。
答案 4 :(得分:0)
最简单的方法是定义这样的xml,并将其命名为my_list_item
或任何你喜欢的内容:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:background="@drawable/customshape"
android:layout_height="wrap_content">
</TextView>
并在代码中更改此行:
lv1.setAdapter(new ArrayAdapter<String>(this,R.layout.my_list_item , listItems));
重要提示:
将颜色设置为
customshape
drawable的背景。没有定义任何颜色会导致一些旧的Android平板电脑(Axtrom,华硕)黑色背景。像这样:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="10dp"/>
<solid android:color="#ffffff"/>
</shape>
另外需要提及的是,您可以在您创建的xml中更改行的所有内容。例如textcolor,textsize,gravity等....
答案 5 :(得分:0)
创建可绘制的布局
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="5dp"/>
<solid android:color="#ff0000"/>
</shape>
然后在listView的后台使用它
android:background="@drawable/yourLayoutName"
答案 6 :(得分:0)
一种简单的方法是使用CardView。以下是您添加依赖项所需的依赖项:com.android.support:cardview-v7:27.0.2
。将其添加到您的build.gradle
接下来,只需浏览到simple_list_item_1.xml
,即浏览到您已创建布局的XML文件,以便使用适配器在ListView中显示单行!
在此XML文件中,将CardView
设为您的父布局,例如,如果这是simple_list_item_1.xml
中的上一个代码:
<RelativeLayout
android:id="main_layout"
android:width="match_parent"
android:height="wrap_content">
...
//Other layouts and normal code here.
...
</RelativeLayout>
然后,您应该将代码更改为:
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardCornerRadius="4dp">
<RelativeLayout
android:id="main_layout"
android:width="match_parent"
android:height="wrap_content">
...
//Other layouts and normal code here.
...
</RelativeLayout>
</android.support.v7.widget.CardView>
在这里,您可以使用CardView的card_view:cardCornerRadius
属性为整个布局提供圆形边缘!
P.S。作为额外的好处,您还可以使用card_view:cardElevation
属性为您的布局提供凸起的外观,如果您使用此属性,请确保在所有方向留下一些空间以产生明暗效果!< / p>
希望我能提供帮助;)
以下是一些可以帮助您的资源:
2)A basic tutorial (with a RecyclerView
)
3)也是我方的免责声明:传统上,CardView
仅用于RecyclerView's,这必须导致人们普遍认为CardView
只能用于一个RecyclerView
而没有别的。这是一种常见的误解,CardView
是一个设计元素,并且不以任何方式绑定到RecyclerView
,它们可以以您想要的任何方式使用!
这是一个四舍五入的CardView
的样子(减去ListView
,即CardView
本身) - 请参阅one of my designs.