Android --- (6),界面布局。横竖屏切换。

Elasticsearch及其插件elasticsearch-head,Kibana安装 1 本文摘要 本文主要介绍Elasticsearch(ES)及相关插件elasticsearch-head,Kibana的安装,以及如何向Elasticsearch中添加数据,查询数据等。随后介绍如何利用ES来构建FAQ问答系统中语义召回的模块,系统要求Ubuntu16.04。 2 Elasticsearch简介 Elasticsearch 是一个建立在全文搜索引擎 Apache Lucene... 阅读详情

时间:2012/11/19

教材:Beginning.Android.4.Application.Development

环境:eclipse


1.安卓用户界面的构建。

--活动通过用户界面和用户进行交互,活动本身不提供界面,而是用Views和ViewGroups来画出用户界面。

(1)屏幕组件的设置。

一个活动的交互界面由各种的小组件组成---Button,TextView等等。在安卓里,用XML语言来定义UI界面,而UI界面的XML文件通常都在res/layout目录中。例如:
<?xml version=”1.0” encoding=”utf-8”?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:orientation=”vertical” >
<TextView
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”@string/hello” />
</LinearLayout>
在活动对应的java文件里面,用onCreate来载入UI界面,在onCreate方法中用setContentView来载入对应的xml文件
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
在编译时期。界面的xml文件会对应的GUI类。

(2)Views和ViewGroups

一个活动包含views和viewgroups,views是在屏幕上面的装饰品,例如button,label,textbox等等,views都是从android.view.View派生出来。
一个或者多个views可以用ViewGroups来分组,ViewGroups(自身也是一个view)提供了一个layout让用户可以指定views的顺序和分布。ViewGroups从android.view.ViewGroups派生。
Android支持一下几种layout
1.LinearLayout
2.AbsoluteLayout
3.TableLayout
4.RelativeLayout
5.FrameLayout
6.ScrollView
接下来讨论下各种layout的细节。

2.LinearLayout布局。

(1)LinearLayout--将views做单行或者单列排列,其中的child view要么被垂直的排布,要么被水平的排布。例如如下代码:
<?xml version=”1.0” encoding=”utf-8”?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:orientation=”vertical” >
<TextView
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”@string/hello” />
</LinearLayout>

在这个xml文件中,布局被设置成linearlayout,而且里面有一个textview控件。每个view或者ViewGroups都有相同的几个属性:
layout_width-->指定了views或者ViewGroups的宽度。
layout_height-->指定views或者ViewGroups的高度
layout_marginTop-->指定了views或者ViewGroups上方的空位。
layout_marginBottom-->指定下方的空位。
layout_marginRight-->指定了右边的空位。
layout_marginLeft-->左边空位。
layout_gravity-->指定了layout的childviews如何排布
layout_weight-->指定了layout额外的空间(extra space)是多少。
layout_x-->指定了views或者ViewGroups的坐标X
layout_y-->指定了坐标y。
--以上某些坐标仅仅使用于某些layout,例如layout_weight和layout_gravity就只适用于一个在LinearLayout里面的view。
<TextView
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”@string/hello” />

以上代码说明了该控件的宽度应该和父控件的宽度一致(android:layout_width="fill_parent"),如果不想这样设置,请设置成wrap_content,这样就仅仅会包围住内容。下面代码指定了控件的宽度:
<TextView
android:layout_width=”100dp”
android:layout_height=”wrap_content”
android:text=”@string/hello” />
<Button
android:layout_width=”160dp”
android:layout_height=”wrap_content”
android:text=”Button”
android:onClick=”onClick” />

有关各种单位,贴出说明如下:
When specifying the size of an element on an Android UI, you should be aware of
the following units of measurement:
dp — Density-independent pixel. 1 dp is equivalent to one pixel on a 160 dpi
screen. This is the recommended unit of measurement when specifying the
dimension of views in your layout. The 160 dpi screen is the baseline density
assumed by Android. You can specify either “dp” or “dip” when referring to a
density-independent pixel.
sp — Scale-independent pixel. This is similar to dp and is recommended for
specifying font sizes.
pt — Point. A point is defi ned to be 1/72 of an inch, based on the physical
screen size.
px — Pixel. Corresponds to actual pixels on the screen. Using this unit is not
recommended, as your UI may not render correctly on devices with a different
screen resolution.

推荐使用dp作为单位,有助于在不同的屏幕密度上将UI显示在正确的位置上,因为dp会根据屏幕dpi不同而调节,故在不同的屏幕上表现良好。这里贴出来如何转换dp和px:
The formula for converting dp to px (pixels) is as follows:
Actual pixels = dp * (dpi / 160), where dpi is either 120, 160, 240, or 320.
Therefore, in the case of the Button on a 235 dpi screen, its actual width is 160
* (240/160) = 240 px. When run on the 180 dpi emulator (regarded as a 160 dpi
device), its actual pixel is now 160 * (160/160) = 160 px. In this case, one dp is
equivalent to one px.
(2)控件走向。垂直or水平。
在LinearLayout中,控件排布是由android:orientation=""来控制的,默认是vertical(水平),也可以设置成horizontal(垂直)。贴两个对比图:
<?xml version=”1.0” encoding=”utf-8”?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:orientation=”vertical” >
<TextView
android:layout_width=”100dp”
android:layout_height=”wrap_content”
android:text=”@string/hello” />
<Button
android:layout_width=”160dp”
android:layout_height=”wrap_content”
android:text=”Button”
android:onClick=”onClick” />
</LinearLayout>
(图左)。
<?xml version=”1.0” encoding=”utf-8”?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:orientation=”horizontal” >
<TextView
android:layout_width=”100dp”
android:layout_height=”wrap_content”
android:text=”@string/hello” />
<Button
android:layout_width=”160dp”
android:layout_height=”wrap_content”
android:text=”Button”
android:onClick=”onClick” />
</LinearLayout>
(图右)。



(3)在LinearLayout中,可以望子组件中添加layout_weight和layout_gravity 属性。代码:

--
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:orientation=”vertical” >
<Button
android:layout_width=”160dp”
android:layout_height=”wrap_content”
android:text=”Button”
android:layout_gravity=”left”
android:layout_weight=”1” />
<Button
android:layout_width=”160dp”
android:layout_height=”wrap_content”
android:text=”Button”
android:layout_gravity=”center”
android:layout_weight=”2” />
<Button
android:layout_width=”160dp”
android:layout_height=”wrap_content”
android:text=”Button”
android:layout_gravity=”right”
android:layout_weight=”3” />
</LinearLayout>
layout_weight决定了这几个控件分布屏幕垂直方向的高度,分别是1/(1+2+3)*100%,2/(1+2+3)*100%,3/(1+2+3)*100%。layout_gravity决定了每个控件在屏幕上的排布位置,贴个图:
由于是垂直排布,故每个button占据一行。每一个的位置在每行中都在layout_gravity决定。那如果排布是水平的,则如下:

3.AbsoluteLayout

--允许用绝对位置来控制组件的位置。例如:
<AbsoluteLayout
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
xmlns:android=”http://schemas.android.com/apk/res/android” >
<Button
android:layout_width=”188dp”
android:layout_height=”wrap_content”
android:text=”Button”
android:layout_x=”126px”
android:layout_y=”361px” />
<Button
android:layout_width=”113dp”
android:layout_height=”wrap_content”
android:text=”Button”
android:layout_x=”12px”
android:layout_y=”361px” />
</AbsoluteLayout>
例子中每个控件都用layout_x和layout_y来定义控件(以左上角为准)。不过在不同的屏幕上,这个布局可能会导致控件重叠等不愉快的现象,不建议使用。

4.TableLayout

--将组件用row和column来控制,用<TableRow>元素来指定每一行的组件。每一行可以添加多个组件,每个放入的组件都看作一个单元格,而列的宽度由最大宽度的控件决定。
<TableLayout
xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_height=”fill_parent”
android:layout_width=”fill_parent” >
<TableRow>
<TextView
android:text=”User Name:”
android:width =”120dp”
/>
<EditText
android:id=”@+id/txtUserName”
android:width=”200dp” />
</TableRow>
<TableRow>
<TextView
android:text=”Password:”
/>
<EditText
android:id=”@+id/txtPassword”
android:password=”true”
/>
</TableRow>
<TableRow>
<TextView />
<CheckBox android:id=”@+id/chkRememberPassword”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Remember Password”
/>
</TableRow>
<TableRow>
<Button
android:id=”@+id/buttonSignIn”
android:text=”Log In” />
</TableRow>
</TableLayout>
如图:

5.RelativeLayout

--将views以相关联的方法来排布。如下:
<?xml version=”1.0” encoding=”utf-8”?>
<RelativeLayout
android:id=”@+id/RLayout”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
xmlns:android=”http://schemas.android.com/apk/res/android” >
<TextView
android:id=”@+id/lblComments”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”Comments”
android:layout_alignParentTop=”true”
android:layout_alignParentLeft=”true” />
<EditText
android:id=”@+id/txtComments”
android:layout_width=”fill_parent”
android:layout_height=”170px”
android:textSize=”18sp”
android:layout_alignLeft=”@+id/lblComments”
android:layout_below=”@+id/lblComments”
android:layout_centerHorizontal=”true” />
<Button
android:id=”@+id/btnSave”
android:layout_width=”125px”
android:layout_height=”wrap_content”
android:text=”Save”
android:layout_below=”@+id/txtComments”
android:layout_alignRight=”@+id/txtComments” />
<Button
android:id=”@+id/btnCancel”
android:layout_width=”124px”
android:layout_height=”wrap_content”
android:text=”Cancel”
android:layout_below=”@+id/txtComments”
android:layout_alignLeft=”@+id/txtComments” />
</RelativeLayout>
在RelativeLayout中,每个子控件都能用属性来控制其对于其他控件的相对位置。
layout_alignParentTop
layout_alignParentLeft
layout_alignLeft
layout_alignRight
layout_below
  layout_centerHorizontal
以上这些属性的值都是参考控件的ID,于是指定了这些属性的控件就会以该ID控件为基准来排布。如下:

6.FrameLayout

--framelayout常用来作为占位符,为以后在其他layout中添加图片或者其他控件占据空间,而动态添加的控件总是位于framelayout的左上角,如下代码:
<?xml version=”1.0” encoding=”utf-8”?>
<RelativeLayout
android:id=”@+id/RLayout”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
xmlns:android=”http://schemas.android.com/apk/res/android” >
<TextView
android:id=”@+id/lblComments”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”Hello, Android!”
android:layout_alignParentTop=”true”
android:layout_alignParentLeft=”true” />
<FrameLayout
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignLeft=”@+id/lblComments”
android:layout_below=”@+id/lblComments”
android:layout_centerHorizontal=”true” >
<ImageView
android:src = “@drawable/droid”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content” />
</FrameLayout>
</RelativeLayout>
其中framelayout镶嵌在一个RelativeLayout中
如果在framelayout中再添加任何其他组件,其都会位于左上角(于安卓机器人重叠)。可以往framelayout中添加多个views,不过新添加的view总会在旧添加的view之上,就如栈一样。

7.ScrollView

--允许用户添加多个views,通过滚动的方式来使窗体可以占据多余屏幕的空间。而ScrollView只能包含一个view或者viewGroup,通常使用的是LinearLayout。代码:
<ScrollView
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
xmlns:android=”http://schemas.android.com/apk/res/android” >
<LinearLayout
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:orientation=”vertical” >
<Button
android:id=”@+id/button1”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Button 1” />
<Button
android:id=”@+id/button2”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Button 2” />
<Button
android:id=”@+id/button3”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Button 3” />
<EditText
android:id=”@+id/txt”
android:layout_width=”fill_parent”
android:layout_height=”600dp” />
<Button
android:id=”@+id/button4”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Button 4” />
<Button
android:id=”@+id/button5”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Button 5” />
</LinearLayout>
</ScrollView>
这里向ScrollView里面的LinearLayout添加多个button和textView(600dp)。于是用户就可以上下滚动来,但是由于textview是自动获得关注的,所以需要将关注点返回到整个LinearLayout上,于是添加了:
<LinearLayout
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:orientation=”vertical”
android:focusable=”true”
android:focusableInTouchMode=”true” >
这样就可以是整个LinearLayout都能看见。



8.适应不同的orientation切换。

--注意当手机orientation切换的时候不同布局的改变。
当手机的orientation转变的时候,Activity的onCreate方法会自动调用。也就是说,在切换orientation的时候,项目的主活动会被销毁再重建。
当orientation切换的时候,如果还是沿用切换前的UI设计的话,可能会在另一种orientation中变得不合适。
总而言之,当orientation转变的时候,掌握两点:
(1)Anchoring(即将UI控件对应于屏幕的四个角。),当orientation转变发生时,控件就会自动靠近屏幕的边,而不会导致浪费很多空间。注意使用一下属性:
layout_alignParentLeft
layout_alignParentRight
layout_alignParentTop
layout_alignParentBottom
layout_centerVertical
layout_centerHorizontal
譬如让一个view放在屏幕的左上方,就设置layout_alignParentLeft和layout_alignParentTop都为true,这样这个view就会别设置在左上角,无论是那种orientation。
注意当
layout_centerVertical
layout_centerHorizontal都设置为true的时候,控件位于垂直的中间和水平的中间,也就是正中。
(2)resizing N repositioning,当然,从新定位各个控件,为两种orientation都设置一个UI那是最好的办法了。
可以为一个活动设置两个xml文件--为两种orientation分别设置UI。当发生orientation转换的时候再按需要分别载入两种UI界面即可。
注意当orientation切换的时候,由于活动先销毁再创建,所以输入且未保存的数据会丢失,注意做好保存。而且当orientation切换时,onPause函数首先被调用,故应该在这个方法中保存当前未保存的信息。
还要注意的是,仅当有ID(设置了android:id)的控件的信息才会自动被保存,当活动被销毁的时候,这些有id的控件的信息会自动的保存和复原当活动再次被创建的时候。
(3)在活动状态改变时保存活动信息。
当活动被recreate的时候,会触动两个方法:
onPause()--一定会触动,当活动被销毁或者移到后台的时候。
onSaveInstanceState()--像上面一样,但是当用户按下back按键的时候这个方法不会被执行(
注意销毁可以是系统内部实现的,不一定是按下back按键,而按下back按键的时候是将整个活动从stack中除去)。
所以,要保存信息,都是在onPause方法中实现,从中可以用database或者文件存储等方法。但如果仅仅想要保存当前的活动状态以便于等下再恢复,那就实现onSaveInstanceState(),因为它提供一个bundle参数可以让你用这个参数来保存当前活动状态。
@Override
public void onSaveInstanceState(Bundle outState) {
//---save whatever you need to persist---
outState.putString(“ID”, “1234567890”);
super.onSaveInstanceState(outState);
}

当一个活动被创建的时候,onCreate方法当然是第一个进行的,而紧接着就会调用onRestoreInstanceState()方法,可以通过bundle对象让你获取之前在onSaveInstanceState()方法中保存的活动状态。
@ Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
//---retrieve the information persisted earlier---
String ID = savedInstanceState.getString(“ID”);
}
注意这种方法仅可以用来存储简单的数据,如果数据再复杂一点的话,就不能了。为此,可以用
onRetainNonConfigurationInstance(),这个方法会在configuration change的时候保存信息。只需要将信息都放在同一个类对象中即可:
@Override
public Object onRetainNonConfigurationInstance() {
//---save whatever you want here; it takes in an Object type---
return(“Some text to preserve”);
}
注意方法中可以用任何object类型的对象来返回,从中提取数据,可以用getLastNonConfigurationInstance()方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(“StateInfo”, “onCreate”);
String str = (String) getLastNonConfigurationInstance();
}
这两个方法配合起来使用可以很好的暂时保存信息。
(4)检测orientation转变。
--可以用windowManager来检测屏幕的改变。如下代码:
import android.view.Display;
import android.view.WindowManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//---get the current display info---
WindowManager wm = getWindowManager();
Display d = wm.getDefaultDisplay();
if (d.getWidth() > d.getHeight()) {
//---landscape mode---
Log.d(“Orientation”, “Landscape mode”);
}
else {
//---portrait mode---
Log.d(“Orientation”, “Portrait mode”);
}
}

getDefaultDIsplay方法返回了一个Display对象,通过获取它的高度和宽度来决定屏幕是在那种状态中。这个方法可以在主活动的onCreate中,判断要载入那个ui界面。
(5)控制活动的orientation。
--可以通过代码来指定当某活动开始时候屏幕的orientation,代码如下:
import android.content.pm.ActivityInfo;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//---change to landscape mode---
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
setRequestOrientation()可以接受一个ActivityInfo来改变屏幕的orientation。
当然,除了以上的方法之外,还可以修改Manifest文件中某个活动的标签,加上android:screenOrientation=“landscape”(或者protrait)来决定当这个活动进行的时候应该用那种Orientation。如下:
<activity
android:label=”@string/app_name”
android:name=”.OrientationsActivity”
android:screenOrientation=”landscape” >
<intent-filter >
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
这里指定了活动的Orientation,所以当屏幕的Orientation发生改变的时候,onCreate方法将不会再被嗲用。

总结:当Orientation改变的时候,onCreate会被调用,可以用onRestoreInstanceState()来保存状态信息,而且用getLastNonConfigurationInstance()来读取。除此之外,可以用windowmanager来检测屏幕的Orientation,并在onCreate方法中作相应判断,决定载入哪个ui界面。最后,可以为某个活动指定其Orientation,并不允许改变。
01ElasticSearch简介及其发展历史 一.Elastic从开源到上市 Elastic Inc - 开源软件 / 上市公司 当前市值超过50亿美金,开盘当天涨幅高达94% ElasticSearch软件下载量,超过3.5亿次 10万+ 的社区成员 7200+ 订阅用户,分布在100+ 国家 云服务 - Elastic, Amazon, 阿里巴巴, 腾讯 二.ElasticSearch简介 1.ElasticSearch - 开源分布... 阅读详情

相关推荐

Base62x编解码开源类库增加C++版本

2020年以来近两个月来,新冠肺炎疫情肆虐中华大地,九洲同悲,四海恐慌, 唯望炎黄子孙同仇敌忾,将传染性病毒早日隔离并捕获进牢笼,打入十八层地狱,永世不得翻身! 自我囚禁之余,安排时间对-Base62x编解码程序进行翻阅,同时考虑并增加了 Base62x 编解码程序的 C++版本。 这是继2016年增加 Base62x in Java, 2017年增加 Base62x in JavaS...

u012553625的博客 901

android 两列网格布局,Visual Studio 开发安卓之布局-网格布局(GridLayout)

GridLayout与 TableLayout用法非常相似,不过它的“单元格”可以跨行,没有了 Row子元素,代码更简洁,还有据说它渲染速度比 TableLayout快。android:layout_width="wrap_content"android:layout_height="wrap_content"android:rowCount="3"android:columnCount=...

weixin_39584549的博客 724

Python 3 Windows安装全攻略:从版本选择到虚拟环境配置

环境变量配置是软件开发和系统管理中连接用户命令与可执行程序路径的核心机制。其原理在于操作系统通过PATH变量中的目录列表顺序查找命令,从而实现全局调用。正确的环境变量配置对于Python、Java等语言的开发环境搭建至关重要,能有效避免“命令未找到”等错误,提升开发效率。在Python开发实践中,除了基础安装,使用虚拟环境进行项目依赖隔离已成为标准实践。通过venv模块创建独立环境,配合pip工具管理包依赖,并结合requirements.txt文件固化环境,能确保项目在不同机器上的可复现性。这些技术广泛应

weixin_32822843的博客 290

安卓实现左侧列表选择项点击,右侧fragment切换

本文介绍了安卓开发中,左侧显示列表选择项,点击不同的选项后右侧切换fragment显示的一种方案

baorant24的博客 2988

Dev-C++官方安装包安全获取指南:从SourceForge到分支版本全解析

集成开发环境(IDE)是程序员编写、调试代码的核心工具,其原理在于将编辑器、编译器、调试器等模块集成于统一界面,提升开发效率。对于C/C++初学者而言,一个轻量、免配置的IDE能显著降低学习门槛,将注意力集中于语法和逻辑本身。Dev-C++作为一款经典的轻量级C/C++ IDE,以其自带MinGW编译器、安装即用的特性,成为入门教学和轻量开发的常见选择。然而,网络上的第三方下载站常捆绑垃圾软件,存在安全风险。因此,从官方或可信源获取纯净安装包至关重要。本文聚焦于如何通过SourceForge等开源托管平台安

csdn785029689的博客 549

ElasticSearch快速入门

Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。

m0_57237237的博客 498

Android 列表布局切换网格布局

Android 列表布局切换网格布局 1.界面布局

Scxioi0的博客 728

新手进行Cygwin/X(Windows)系统下安装使用NCL

一开始看不懂书上的介绍,自己乱来去官网看英文教程,还出了很多错误,因为入门者下载Cygwin及正确解压NCL会遇到很多问题,稍有不慎则需重新安装,而且英文教程虽说能看懂大概,但是由于本身对款模拟器完全没有基础而不能完全理解内容,因此折腾了N次最后没有办法还是尝试着安装书本步骤走,由于逛论坛看了很多关于处理问题的帖子,也学了一些Linux的编程语言,便能看懂了书上的内容,才发现老师是大神啊,已经帮我

Vicky510475733的博客 2万+

Android竖屏模式实现横屏效果

android横竖屏切换是非常耗时间的,而且切换的过程也会存在明显的翻转卡顿效果,那么是否可以在竖屏模式下实现横屏的效果呢?答案是肯定的,这里提供一种方法,其思路是对view进行90度的旋转,而且实现起来非常简单,其效果图如下: 首先我们先在layout里排版出一个水平的布局,如下图: 是不是很简单?布局代码如下: <?xml versi...

weixin_33887443的博客 610

Perl语言版本选择与安装配置全指南

Perl作为经典的脚本语言,在文本处理和系统管理领域具有不可替代的优势。其版本管理遵循语义化规范,稳定版与开发版各有适用场景。通过CPAN模块仓库,开发者可以便捷获取数千个功能模块。在工程实践中,正确的Perl版本选择直接影响项目稳定性,特别是在与MySQL等数据库交互时需要注意模块兼容性。本文以Perl 5.38为例,详细解析从源码编译到二进制包安装的全流程,并针对Windows、Linux和macOS等不同平台提供配置方案,同时涵盖性能优化和安全更新等关键实践。

weixin_33146151的博客 270

ElasticSearch从入门到精通:基础知识

我是Jackpop,我们交个朋友吧!你会如何处理实时或准实时数据流?在大数据时代,有很多方案可以帮助你完成这项任务。接下来,我将通过一个系列的教程,我将利用Storm、Kafka、ElasticSearch逐步教你搭建一个实时计算系统。搭建系统之前,我们首先需要了解一些定义。通过考虑四个不同的属性,帮助你更好地理解大数据:数据量,速度,多样性和准确性。存在具有不同用途的大数据工具:数据处理工具可进一步分类为:批处理流梳理我们将使用一些实际数据来数据规约系统(DRS)。根据维基百科,“数据规约是将数字或字母数

jakpopc的博客 652

Android全屏和强制横屏竖屏设置

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置成全屏模式 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//强制为横屏 se

知识空间 2701

Elasticsearch 系列专题 - 第一篇:Elasticsearch 入门

Elasticsearch 是一个基于 Apache Lucene 的分布式全文搜索引擎,设计目标是提供高效的搜索和分析能力。它支持 RESTful API,可以轻松与各种编程语言和工具集成。分布式:数据分布在多个节点,支持高可用性和横向扩展。全文搜索:支持复杂的查询和文本分析。近实时:数据写入后几乎立即可搜索。Elasticsearch 使用 RESTful API,通过 HTTP 请求与服务交互。GET:查询数据。POST:创建或更新数据。PUT:创建索引或更新配置。DELETE。

资深架构师分享:深入剖析软件架构,探讨云计算、微服务、大数据等前沿技术。分享实践经验,促进技术交流,共同构建卓越系统。 935

Ubuntu 20.04 官方APT部署Elasticsearch完整指南

Elasticsearch 是一个基于 Lucene 构建的分布式搜索与分析引擎,其核心原理依赖于倒排索引、分片(shard)机制和近实时(NRT)数据处理。技术价值体现在高并发全文检索、日志结构化分析与可观测性支撑能力上。典型应用场景包括企业级日志归集(如对接 Filebeat/Logstash)、应用性能监控(APM)数据存储,以及 Spring Boot 微服务的搜索增强。在 Ubuntu 20.04 这类 LTS 系统中,采用官方 APT 仓库部署而非 curl | bash 或 tar.gz 手动

weixin_30838873的博客 447

2025最详细 Windows 系统安装 Python 教程

Python 是一门广泛使用的编程语言,适用于多种开发任务。本文将详细介绍如何在 Windows 系统上安装 Python。是 Python 的包管理工具,它帮助您安装 Python 包。虚拟环境可以帮助您为不同的项目创建独立的 Python 环境,避免不同项目之间的依赖冲突。会将 Python 添加到系统环境变量中,允许您在命令行中直接使用。激活后,您会看到命令行提示符前出现。在命令行中输入以下命令,验证。在虚拟环境激活后,您可以使用。,表示虚拟环境已成功激活。在安装界面,确保选中。

郝开的博客 4671

2w 字带你实战 ElasticSearch !

Logstash是一个开源的数据收集引擎,具有实时流水线功能。它从多个源头接收数据,进行数据处理,然后将转化后的信息发送到stash,即存储。Logstash允许我们将任何格式的数据导入到任何数据存储中,不仅仅是ElasticSearch。它可以用来将数据并行导入到其他NoSQL数据库,如MongoDB或Hadoop,甚至导入到AWS。数据可以存储在文件中,也可以通过流等方式进行传递。Logstash对数据进行解析、转换和过滤。

wadfdhsajd的博客 300

Python代码自动转成其他编程语言代码

如果将代码自动转成其他编程语言,你会尝试吗?今天给大家分享一个有意思的项目,它能将代码自动转成代码。这或许对搞算法的同学有点帮助。该项目是 GitHub 开源项目,使用非常简单,下载后安装依赖,运行对应的脚本即可。 以下面的 代码为例 转换成 代码如下: 实际上是调用的来完成代码转换。核心代码如下: 本质上就是一个函数调用,其中参数是代码转换模型。介绍之前,先来了解下模型。是在 2020年 5 月发布的一个模型,这个模型包含1750亿的参数,比多了两个数量级,比GPT-2有了极大的改进。 ...

python_TB的博客 1096

Cocos2d-x项目创建全攻略:从cocos new参数解析到多语言模板选择

在跨平台游戏开发中,项目初始化是构建稳定架构的关键第一步。Cocos2d-x作为成熟的游戏引擎,其命令行工具通过参数化配置和模板化生成,实现了项目的快速搭建。理解cocos new命令的参数机制,如包名规范、语言选择和模板类型,能有效规避后期结构混乱和平台兼容性问题。本文聚焦于Cocos2d-x项目创建的核心环节,深入解析cocos命令行工具的工作流程,对比cpp、lua、js等多语言模板的差异与适用场景,并针对常见的编译错误如“system is unavailable”提供解决方案,帮助开发者建立健壮的

weixin_30797199的博客 334
上一篇: Android --- (5)intent对象更多用法,目录说明,打印Notification
下一篇: Android --(7),Action Bar,侦听UI组件的动作
theonlydk
博客等级 码龄14年 0粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值